我有一个复杂的设置,我需要能够使用不同的JDK编译不同的项目。所以,目前我有一个docker镜像,它手动安装了Oracle JDK 5和Oracle JDK 6,并通过apt-get安装了Open JDK 8(因此它是图像中的默认java)。
在我的一个项目中,我将项目JDK设置为Oracle JDK 6,Jenkins正确使用此JDK来编译项目。但是,在传递给编译器的类路径参数中,Jenkins正在添加JDK 8 tools.jar和而不是 JDK 6 tools.jar。
在代码中,遗憾的是,我们正在调用com.sun.tools.javac.Main,并且此类的import语句正在尝试从JDK 8 tools.jar导入。因此,编译失败,说明:
class file has wrong version 52.0, should be 50.0
那么,我怎样才能让Jenkins使用正确的tools.jar?
我想我可能会强制JDK 6 tools.jar成为类路径上的第一个项目,因此JDK 8类将被忽略,但我不是100%肯定会工作(或者如果它在Jenkins中是可能的),这似乎是一种可怕的方式。
注意:我无法真正将任何系统属性更改为总是使用JDK 6,因为有些项目需要使用适当的工具使用JDK 8进行编译.jar !
编辑:我将Maven添加到标题中,因为我怀疑可能是实际修复需要的地方。
编辑2:我开始调查Maven角度,我发现有人实际上已经为我们的某个POM文件添加了一个依赖项,但是这样做会导致错误的工具.jar正在使用......我想......
答案 0 :(得分:0)
解决这个问题的最简单方法似乎是在我们的Nexus实例中安装tools.jar并在com.sun:tools上添加常规依赖项。