Jeśli nie jesteś gotowy do obsługi kompilacji aplikacji dla Java 7, nadal możesz kompilować dla Javy 1.6 przy użyciu kompilatora Java 7. Będziesz potrzebował środowiska wykonawczego Java 1.6 (lub SDK). Jeśli próbujesz kompilacji MyDataSource.java
klasy, która implementuje zgaszone DataSource
użyciu Java 7 kompilator, można znaleźć w następujących miejscach:
$ 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
Musisz poinformować kompilator, który chcesz użyć plików źródłowych napisanych w języku Java 1.6, produkować Java 1.6 kod bajtowy i gdzie znaleźć Java Runtime 1.6 dzbanka:
$ 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;
}
To nie pierwszy raz. Dzieje się tak zawsze, gdy aktualizują JDBC. Zgadzam się, że to nie jest ładna rzecz (tm). Na przykład wielu kierowców musi utrzymywać oddzielne wersje właśnie z tego powodu. To jest ból, ale powinno to spowodować błędy kompilacji, a nie błędy w czasie wykonywania (np. Można zbudować dla JDK6 i nadal uruchamiać z JDK7). – Thilo
Interfejsy JDBC stały się wielokrotnie niekompatybilne wstecz (przez dodanie metod) w przeszłości. Powinieneś być w stanie dodać dodatkowe metody do swoich zajęć i powinny one pracować bez problemu w środowiskach sprzed 1.7. –
Hm ... Czy to nie psuje kompatybilności binarnej? Mam na myśli - moja implementacja DS została skompilowana ze starym DS, bez dodania nowej metody - wydaje się, że jest to zmiana binarna niekompatybilna, nieprawdaż? – BegemoT