यदि आप तैयार नहीं हैं जावा 7 के लिए अपने आवेदन को संकलित करने के लिए, आप अभी भी जावा 7 कंपाइलर का उपयोग कर जावा 1.6 के लिए संकलित कर सकते हैं। आपको जावा 1.6 रनटाइम पर्यावरण (या एसडीके) स्थापित करने की आवश्यकता होगी। यदि आप एक MyDataSource.java
वर्ग है कि एक टोंटदार DataSource
लागू करता है एक जावा 7 संकलक का उपयोग कर संकलन की कोशिश, तो आप निम्न देख सकते हैं:
$ java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Server VM (build 21.0-b17, mixed mode)
$ javac -version
javac 1.7.0
$ javac MyDataSource.java
MyDataSource.java:7: error: MyDataSource is not abstract and does not override abstract method getParentLogger() in CommonDataSource
public class MyDataSource implements DataSource {
^
1 error
आप संकलक है कि आप जावा 1.6 के लिए लिखा स्रोत फ़ाइलों का उपयोग करना चाहते बताने के लिए की जरूरत है, का उत्पादन जावा 1.6 बाईटकोड और जहां जावा 1.6 क्रम JAR लगता है:
$ javac -source 1.6 -target 1.6 -bootclasspath <path to Java 1.6 JRE>/lib/rt.jar MyDataSource.java
$ file MyDataSource.class
MyDataSource.class: compiled Java class data, version 50.0 (Java 1.6)
$ javap MyDataSource
Compiled from "MyDataSource.java"
public class MyDataSource implements javax.sql.DataSource {
public MyDataSource();
public java.io.PrintWriter getLogWriter() throws java.sql.SQLException;
public void setLogWriter(java.io.PrintWriter) throws java.sql.SQLException;
public void setLoginTimeout(int) throws java.sql.SQLException;
public int getLoginTimeout() throws java.sql.SQLException;
public <T extends java/lang/Object> T unwrap(java.lang.Class<T>) throws java.sql.SQLException;
public boolean isWrapperFor(java.lang.Class<?>) throws java.sql.SQLException;
public java.sql.Connection getConnection() throws java.sql.SQLException;
public java.sql.Connection getConnection(java.lang.String, java.lang.String) throws java.sql.SQLException;
}
स्रोत
2011-12-14 14:47:46
यह पहली बार नहीं है। यह तब होता है जब वे जेडीबीसी अपडेट करते हैं। मैं मानता हूं कि यह एक अच्छा बात नहीं है (टीएम)। उदाहरण के लिए कई ड्राइवरों को इसके कारण अलग-अलग संस्करणों को बनाए रखने की आवश्यकता है। यह एक दर्द है, लेकिन इसका परिणाम केवल त्रुटियों को संकलित करना चाहिए, न कि रनटाइम त्रुटियों में (यानी आप जेडीके 6 के लिए बना सकते हैं और अभी भी इसे जेडीके 7 के खिलाफ चला सकते हैं)। – Thilo
जेडीबीसी इंटरफेस अतीत में पिछड़े-असंगत कई बार (विधियों को जोड़कर) बन गए हैं। आप अपनी कक्षाओं में अतिरिक्त विधियों को जोड़ने में सक्षम होना चाहिए, और उन्हें पूर्व-1.7 वातावरण में बिना किसी समस्या के काम करना चाहिए। –
एचएम ... क्या यह बाइनरी संगतता को तोड़ता नहीं है? मेरा मतलब है - डीएस के मेरे कार्यान्वयन को पुराने डीएस के खिलाफ संकलित किया गया था, बिना किसी नई विधि के जोड़ा गया - यह बाइनरी असंगत परिवर्तन प्रतीत होता है, है ना? – BegemoT