【发布时间】:2015-06-29 01:32:26
【问题描述】:
我有一个复杂的设置,我需要能够使用不同的 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 文件添加了依赖项,但这样做的方式导致了错误的工具.jar 正在使用中...我认为...
【问题讨论】:
-
你能分享dependency:tree的目标结果吗?
标签: java maven jenkins tools.jar