我想用JAVA_HOME指向JDK7,但是我想为JVM 5编译一个项目.我已经阅读了documentation,我已经在SO上找到了similar posts,但是在我的设置中似乎没有任何一个工作.
我首先尝试设置目标和源,但我有一个错误:
<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
据我所知,这个类在JDK 7中被更新,只是添加了抛出错误的额外的方法.我需要使用具有旧实现的JDK 5的运行时间,一切都应该正常工作.所以我这样做:
<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>
我的系统上正确设置了JAVA5_HOME,我可以看到它在日志中加载正确的类,但是我又碰到另一个错误:
[loading ZipFileIndexFileObject[c:\Program Files\Java\jdk1.5.0_22\jre\lib\rt.jar(*.class)]]
…
…
[ClassName]
error: packagejavax.crypto
does not exist
这是很公平的,因为我没有在bootclasspath中包含jce.jar(加密类).有一件事让我难以置信.即使bootclasspath只包含Java 5运行时,我在类路径中有很多来自JRE7的库.它们没有在任何地方指定.
[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,…]
如果我尝试添加jce.jar(从JRE5),我回到第一个错误:
<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()
我也看不到rt.jar被加载的痕迹,但是我没有找到java.lang没有找到错误,所以有一些类被加载到类路径上.
我将通过制作一个批量脚本来修复JAVA_HOME,然后再建立并重新设置它,但我真的希望这样做是正确的.这似乎不是一个极端的用例.