我一直试图让它工作一段时间,但还没有运气。
我想JAVA_HOME
指向 JDK7 运行,但我想为 JVM 5 编译一个项目。我已经阅读了文档,我在 SO 上找到了类似的帖子,但它们似乎都不适用于我的设置。
我第一次尝试设置只是target
,source
但我得到了一个错误:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
[ClassName]
getParentLogger()
不是抽象的,也不会覆盖抽象方法CommonDataSource
据我了解,该类已在 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]
错误:包javax.crypto
不存在
这很公平,因为我没有jce.jar
在bootclasspath
. 不过,有一件事让我感到困惑。即使bootclasspath
只包含 Java 5 运行时,我在类路径中有很多来自 JRE7 的库。它们没有在任何地方指定。
[类文件的搜索路径: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文件\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>
类型 [ClassName] 必须实现继承的抽象方法 CommonDataSource.getParentLogger()
我也看不到被加载的痕迹rt.jar
,但我没有收到java.lang
未找到的错误,因此类路径上正在加载一些类。
我将通过制作一个JAVA_HOME
在构建之前覆盖并在之后将其设置回来的批处理脚本来临时修复它,但我真的希望以正确的方式完成。这似乎不是一个极端的用例。:)
我在这里做错了什么?