我最近被一些代码刺痛了,这些代码在我们的部署周期中没有抛出任何编译错误(我们认为)...
有问题的代码正在使用新的静态方法
Integer.compare
,这是自 Java 1.7 以来的。
服务器环境运行在Java 1.6上。虽然我们的开发环境安装了Java 1.7。
我们的假设是将项目首选项设置为 JavaSE-1.6 合规性至少会给我们有关相关代码的编译警告,但是在 Eclipse 中看不到任何警告或错误。
项目 > 属性 > java 编译器 > JDK 合规性 > 在 java 构建路径上使用执行环境“JavaSE-1.6”的合规性
其次,我们使用maven来编译最终的部署。 pom 明确指示要遵守 1.6 编译器:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<optimize>true</optimize>
</configuration>
</plugin>
然而,maven 构建成功运行,但有问题代码。
当代码无法在比它正在编译的更早的 JVM 中运行时,我如何告诉 maven 和 eclipse 都失败?
谢谢,保罗。
使用 Maven 动物嗅探器插件来告诉您何时使用不向后兼容的 API。我还被告知 Java 1.7 有这方面的功能,但我没有个人经验。
在开发环境中安装java 1.6,然后在eclipse中右键单击项目,进入Properties->Java Build Path。 转到“库”选项卡并删除 java 1.7 JRE,然后添加 java 1.6 JRE。
我对maven不够熟悉,无法回答那一半。