【问题标题】:compiling down a version - eclipse, maven编译一个版本 - eclipse,maven
【发布时间】:2012-03-19 01:18:15
【问题描述】:

我最近被一些代码刺痛了,它在我们的部署周期中没有抛出任何应该出现的编译错误(我们认为)......

有问题的代码使用自 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 都失败?

谢谢,保罗。

【问题讨论】:

  • 我记得我以前也遇到过类似的情况(但它是 1.5 对 1.6),但当时它的工作方式符合您的预期。我怀疑JDK中是否有任何错误导致这种情况?

标签: java eclipse maven compiler-construction


【解决方案1】:

当您使用不向后兼容的 API 时,请使用 maven 动物嗅探器插件告诉您。我还听说 Java 1.7 对此有一个特性,但我没有个人经验。

【讨论】:

  • 这很好用,至少我可以确保不正确的代码不会被部署。谢谢。
【解决方案2】:

在开发环境中安装java 1.6,然后在eclipse中右击项目,进入Properties->Java Build Path。转到库选项卡并删除 java 1.7 JRE,然后添加 java 1.6 JRE。

我对 maven 不够熟悉,无法回答那一半。

【讨论】:

  • 不安装旧版java就不行吗?
  • 据我所知,是的。无论是我描述的方式还是合规性菜单中的下一个框,都有一个编译器合规性级别的下拉菜单。如果您为编译器合规性选择较旧的 java,则底部会显示一条消息,说明您已安装该级别的 jre。
  • 是的,我注意到了,但希望避免这种情况,因为我们有几个不同的项目有不同的要求......
猜你喜欢
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 2019-02-24
  • 2011-03-09
相关资源
最近更新 更多