Ale*_*ian 10 java jdk1.5 maven
我一直试图让它工作一段时间,但还没有运气.
我想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>
Run Code Online (Sandbox Code Playgroud)
[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>
Run Code Online (Sandbox Code Playgroud)
我在我的系统上正确设置了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 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>
Run Code Online (Sandbox Code Playgroud)
类型[ClassName]必须实现继承的抽象方法CommonDataSource.getParentLogger()
我也看不到rt.jar被加载的痕迹,但我没有得到一个java.lang未找到的错误,所以在类路径上加载了一些类.
我会通过制作一个JAVA_HOME在构建之前覆盖的批处理脚本并稍后将其设置回来暂时修复它,但我真的希望这样做是正确的.这似乎不是一个极端的用例.:)
我在这做错了什么?
这个答案针对的是问题的标题,而不是针对问题的具体问题.
我最终在我的项目中使用了这个解决方案,它允许我通过激活maven配置文件选择性地使用自定义引导类路径.我强烈建议为此使用配置文件,否则它会使没有设置环境变量的任何人的构建失败(非常糟糕,特别是对于开源项目).我只在IDE中激活此配置文件以进行"清理和构建"操作.
<profile>
<id>compileWithJava5</id>
<!--
NOTE
Make sure to set the environment variable JAVA5_HOME
to your JDK 1.5 HOME when using this profile.
-->
<properties>
<java.5.home>${env.JAVA5_HOME}</java.5.home>
<java.5.libs>${java.5.home}/jre/lib</java.5.libs>
<java.5.bootclasspath>${java.5.libs}/rt.jar${path.separator}${java.5.libs}/jce.jar</java.5.bootclasspath>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<compilerArguments>
<bootclasspath>${java.5.bootclasspath}</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以在 maven-compiler-plugin 上使用 bootclasspath 配置选项:
<compilerArguments>
<bootclasspath>xxxxxxxxx</bootclasspath>
</compilerArguments>
Run Code Online (Sandbox Code Playgroud)
你可以在这里读更多关于它的内容。请参阅示例下的注释。
| 归档时间: |
|
| 查看次数: |
17360 次 |
| 最近记录: |