Maven标准化了对多版本罐子的支持

Izb*_*gen 6 maven java-9

Java 9与JEP-238一起发布,它基本上允许我们发布多个版本的运行时类.问题是maven如何支持这个JEP?

  • 我的意思是在maven中配置多个版本的方式和位置?我知道我可以运行一个ant任务,但是我可以用maven-compiler插件或其他标准方式来做吗?
  • 我应该在哪里以及如何放置不同版本的java类?JEP正在限制已编译的类文件并告诉我们应该将它放在jar中的位置但是开发呢?

Nam*_*man 3

我的意思是如何以及在哪里配置 Maven 中的多个版本?我知道我可以运行 ant 任务,但是我可以使用 maven-compiler 插件或其他标准化方式来完成它吗?

我相信这maven-compiler-plugin不是处理发布的合适地方,或者即使我们说 ant 任务也是如此。它应该正在编译一个项目的源代码,以寻求其需求,但它已经引入了一个标志

-release N
Run Code Online (Sandbox Code Playgroud)

其用法似乎与 和-source N类似-target N

它应针对特定 VM 版本(N)进行编译,并应支持目标:6、7、8、9。它类似于 中引入的新javac标志

--release <release>
Run Code Online (Sandbox Code Playgroud)

创建多版本 jar 的 java 方式,将一些文件放入META-INF/versions/9此后的目录中,格式如下:

jar --create --file mr.jar -C foo classes --release 9 -C foo9 classes
Run Code Online (Sandbox Code Playgroud)

就 MR-JAR maven 实现而言,当前的替代方案之一可以通过@simas链接或在下面的分析之一中作为提案列出(无法找到其已发布的实现)。

注意:难道人们不应该更愿意转向JMODs 而不是考虑MR-JAR版本 9 及更高版本吗?

我应该在哪里以及如何放置不同版本的 java 类?

在文档Java 9 及其对 Maven 项目的影响中,解决 MR-JAR 的建议是对 JEP -238中提到的结构进行 1 对 1 的转换

project root
 src/main/java
 - A.java
 - B.java
 - C.java
 - D.java
 src/main/java9
 - A.java
 - B.java
 src/main/java10
 - A.java
Run Code Online (Sandbox Code Playgroud)

虽然它可以executions在 Maven 中与不同的版本一起工作,但可能不方便暴露在 IDE 中。

另一个带有示例hboutemy/maven-jep238 的替代品已列出,以利用以下结构:-

multimodule root
 multirelease-base/src/main/java
 - A.java
 - B.java
 - C.java
 - D.java
 multirelease-nine/src/main/java
 - A.java
 - B.java
 multirelease-ten/src/main/java
 - A.java
 multirelease/src/assembly/mvjar.xml
Run Code Online (Sandbox Code Playgroud)

2017 年 10 月 4 日

我找不到开源/组织使用这些提案的官方文档或实现,因此推断目前使用 Maven 不太可能