我有一个复杂的设置,我需要能够使用不同的 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 并且该类的导入语句正在尝试从 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 和适当的 tools.jar 进行编译!
编辑:我在标题中添加了 Maven,因为我怀疑这可能是实际修复需要的地方。
编辑 2:我开始调查 Maven 角度,我发现有人实际上已经向我们的一个 POM 文件添加了依赖项,但是这样做的方式导致使用了错误的 tools.jar ......我想。 ..