【问题标题】:Maven: ensure cross Java version compatibilityMaven:确保跨Java版本兼容性
【发布时间】:2017-05-05 10:51:35
【问题描述】:

我当前的任务是确保给定的 Java 项目在 Java (JRE) 上运行,从版本 6 到版本 9。有什么方法可以使用 Maven 做到这一点?

我想配置 maven-compilter-plugin 是其中的一部分。应该是

<source>1.6</source>

确保不使用更高版本的功能?那么&lt;target&gt;呢?

Maven 应该使用哪个 Java 版本运行? Java 9?

animal-sniffer-maven-plugin 看起来也很有趣,但不确定它是否适合这里。这也很困难,因为 Java 6 并不是真正的最低 API,因为 AFAIK 它有一些 Java 9 没有的类(例如来自 sun 和 com.sun 包的一些类)。

还有什么?有人已经这样做了吗?

【问题讨论】:

  • com.sun 包不是 API 的一部分,不应被应用程序使用。
  • 好吧,这不是我的应用程序。我没有在项目中使用那些 com.sun 类,很多年前有人使用过。我可能是找到并替换它们的人...
  • @mbee 如果您使用来自com.sun 的类,那么它将无法在带有 JPMS 的 Java 9 中运行。您必须首先重构您的应用程序以使其适合 Java 9
  • 最后一条评论大多是假的。大多数com.sun 包仍然存在,并且可以通过命令行标志--add-exports 访问 - 请参阅java -Xjavac -X。看看这个帖子看看how to use Maven &lt;args&gt; with these flags

标签: java maven java-9


【解决方案1】:

对此的一些说明(也许不是真正的答案):

首先,animal-sniffer-maven-plugin 插件可以检查您的代码是否仅使用来自 JDK 6 (API) 的代码,这是您必须检查的最低部分(或其他 JDK 版本)。 此外,您需要检查您的项目是否对包含字节码的 jar 有依赖项,不需要超过基于 JDK 6 的代码。

&lt;target&gt;/&lt;source&gt; 不能保证这样的事情。他们只确保生成的 jar 文件(类文件格式)至少适用于 JRE 6,但不确保它也能在 JRE 9 上运行。

如果您需要在 JRE 9 上运行,您的项目中需要有一个 module-info.java 文件。

此外,您的项目使用com.sun.*,据我所知,您有很多事情要做(如果您要在带有 JDK 的 Mac 上运行这些类不存在)很长一段时间(请参阅here)。

您可以查看Maven Core,因为我们需要确保 Maven 也在 JRE 9 上运行...(我们正在使用 JDK 9 EA 包来测试这个)..我们使用 animal-sniffer-maven-plugin 等。以确保这有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2012-11-30
    • 2017-04-22
    • 2016-07-08
    • 2019-08-27
    • 1970-01-01
    相关资源
    最近更新 更多