1

我有一个复杂的设置,我需要能够使用不同的 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 ......我想。 ..

4

1 回答 1

0

解决这个问题的最简洁的方法似乎是在我们的 Nexus 实例中简单地安装 tools.jar 并添加对 com.sun:tools 的常规依赖。

于 2015-06-29T19:08:39.077 回答