Tôi đã cố gắng để có được điều này để làm việc trong một thời bây giờ nhưng không có may mắn được nêu ra.Maven - Sử dụng JDK 7 để biên dịch cho JVM 5
Tôi muốn chạy với JAVA_HOME
trỏ đến JDK7 nhưng tôi muốn biên dịch một dự án cho JVM 5. Tôi đã đọc qua documentation, tôi đã tìm thấy similar posts trên SO, nhưng không ai trong số họ có vẻ hoạt động trong thiết lập của tôi.
đầu tiên tôi thử với chỉ đặt target
và source
nhưng tôi đã nhận ra lỗi:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
[ClassName]
is not abstract and does not override abstract methodgetParentLogger()
inCommonDataSource
Theo như tôi hiểu lớp đó đã được cập nhật trong JDK 7 và phương pháp bổ sung mà là ném lỗi là vừa thêm. Tôi cần phải sử dụng thời gian chạy của JDK 5 có thực hiện cũ và tất cả mọi thứ sẽ làm việc tốt. Vì vậy, tôi làm điều này:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<source>1.5</source>
<target>1.5</target>
<compilerArguments>
<bootclasspath>${env.JAVA5_HOME}/jre/lib/rt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
Tôi có JAVA5_HOME đặt đúng trên hệ thống của tôi, tôi có thể nhìn thấy nó tải các lớp học đúng trong nhật ký, nhưng tôi nhấn một lỗi:
[loading ZipFileIndexFileObject[c:\Program Files\Java\jdk1.5.0_22\jre\lib\rt.jar(*.class)]]
...
...
[ClassName]
error: packagejavax.crypto
does not exist
Đó là đủ công bằng , vì tôi không bao gồm jce.jar
(lớp mã hóa) trong số bootclasspath
. Mặc dù vậy, có một thứ khiến tôi lo lắng. Mặc dù bootclasspath
chỉ chứa thời gian chạy Java 5, tôi có rất nhiều thư viện từ JRE7 trong đường dẫn lớp. Chúng không được chỉ định ở bất kỳ đâu.
[search path for class files: c:\Program Files (x86)\Java\jdk1.5.0_22\jre\lib\rt.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\dnsns.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\localedata.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\sunec.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\sunjce_provider.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\sunmscapi.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\zipfs.jar, ...]
Nếu tôi cố gắng và thêm jce.jar (từ JRE5), tôi nhận được trở lại các lỗi đầu tiên:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<source>1.5</source>
<target>1.5</target>
<compilerArguments>
<bootclasspath>${env.JAVA5_HOME}/jre/lib/rt.jar${path.separator}${env.JAVA5_HOME}/jre/lib/jce.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
The type [ClassName] must implement the inherited abstract method CommonDataSource.getParentLogger()
Tôi cũng thấy không có dấu vết của rt.jar
được nạp, nhưng tôi không nhận được lỗi java.lang
không tìm thấy, do đó, có một số lớp đang được tải trên đường dẫn lớp.
Tôi sẽ sửa tạm thời bằng cách tạo tập lệnh theo lô ghi đè JAVA_HOME
trước khi tạo và đặt lại sau, nhưng tôi thực sự muốn điều này được thực hiện đúng cách. Điều này không có vẻ như một trường hợp sử dụng cực đoan như vậy. :)
Tôi đang làm gì sai ở đây?
Hãy xem ví dụ của tôi, tôi đang sử dụng theo cách đó nhưng nó không hoạt động nếu tôi chỉ định nhiều lọ. Tui bỏ lỡ điều gì vậy? –