检查项目是否使用了Java 7引入的代码。

3
在我的开发机上,我已经安装了JDK 1.7,但是我们正在为Java 1.5和1.6打包软件。很容易设置-source和-target选项,以便语法被强制为特定版本,输出类可以被特定的VM解释。但是还有其他的版本问题困扰着我,例如两个参数的构造函数AssertionError(String, Throwable)和各种其他微妙的变化。
我所知道的一个解决方法是安装每个不同的JDK(1.5、1.6、1.7),这样Eclipse就可以完全匹配我的执行环境。是否有其他方法来检测这些问题?如果它是Eclipse或Maven工具,则得到额外的奖励分数。

2
老实说,做这件事情的“正确”方式可能是使你的所有代码都与最低公共分母兼容。 - Louis Wasserman
我记得曾经为一个项目设置了代码级别为1.5,但是eclipse使用的是1.6来编译。我在我的代码中不小心使用了String.isEmpty()(在1.6中引入),直到客户实际部署和运行它时才被发现。所以,不要冒险,确保你使用正确的平台进行测试。通过设置源和目标级别,你不能确定是否使用了后续版本中引入的某些API。 - Kalpak Gadre
1
你可以在编译时设置引导类路径,但这仍然需要安装相应的JDK。因此,安装不同的JDK并使用它们运行构建仍然是最简单的方法。正如你所想,Eclipse会为你完成这个过程,所以使用起来应该很容易。 - Christian Schlichtherle
是的,你们可能是对的。这只是一个麻烦,因为我没有 root 权限,所以每当有更新时,我必须让别人更新所有 N 个 Java 安装程序,但这是确保安全的唯一方法。 - rescdsk
2个回答

1

0

这个工具有用吗?它是命令行的,我看到有人用它来检测是否使用了Java7。


不幸的是,这只检查了类是否可以被特定虚拟机解释。如果你告诉javac -target 1.5,它会愉快地创建一个1.5虚拟机可以理解但使用了1.7库的输出,而这些库是不可用的。 - rescdsk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接