Maven 对多版本 jar 的标准化支持

Maven standardized support for multi-releases jars

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

I mean how and where to configure multiple versions in maven? I know I can run an ant task, but can I do it with say maven-compiler plugin or another standardized way?

我认为 maven-compiler-plugin 不是处理发布或即使我们说 ant 任务的合适位置。它应该是在编译一个项目的源代码,尽管它引入了一个标志

-release N

其用法似乎类似于 -source N-target N

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

--release <release>

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

jar --create --file mr.jar -C foo classes --release 9 -C foo9 classes

就 MR-JAR maven 实施而言,其中一个替代方案目前可能由 链接或在其中一项分析中列为提案(无法找到其已发布的实施) .

注意:难道人们不应该对迁移到 JMOD 感兴趣而不是考虑 MR-JAR 版本 9 及更高版本吗?

And where and how should I place the different versions of java classes?

在文档中Java 9 and its Impact on Maven Projects, the proposals to solve for the MR-JAR has been to either keep a 1 to 1 translation to the structure as mentioned in the JEP-238

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

虽然可以在 Maven 中与不同的 executions 一起使用,但可能不方便暴露给 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

2017 年 10 月 4 日

我找不到官方文档或实现,其中这些建议被开放 source/organisation 使用,因此推断其 目前使用 Maven 不太可能

有两个示例如何使用 Maven 处理 JEP-238

  1. 如何构建组织为 JEP-238 的 Maven 项目的示例 多模块一个
  2. 单模块maven项目示例 预处理

SLF4J 似乎可以使用多个模块。