我最近受到一些代码的攻击,这些代码通过我们的部署周期而不会抛出任何编译错误(我们认为)......
有问题的代码使用自Java 1.7以来的新静态方法Integer.compare
。
服务器环境在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都失败?
谢谢,保罗。
答案 0 :(得分:2)
在开发环境中安装java 1.6,然后在eclipse中右键单击项目,转到Properties-&gt; Java Build Path。转到Libraries选项卡并删除java 1.7 JRE,然后添加java 1.6 JRE。
我不太熟悉maven来回答那一半。
答案 1 :(得分:2)
使用maven animal sniffer插件告诉您何时使用不向后兼容的API。我还被告知Java 1.7有一个功能,但我没有个人经验。