Maven 对多版本 jar 的标准化支持
Maven standardized support for multi-releases jars
Java 9 与 JEP-238 一起发布,这基本上允许我们发布 运行time classes 的多个版本。问题是maven如何支持这个JEP?
- 我的意思是如何以及在何处配置 Maven 中的多个版本?我知道我可以 运行 一个 ant 任务,但是我可以用 maven-compiler 插件或其他标准化方式来完成吗?
- 我应该在哪里以及如何放置不同版本的 java classes? JEP 正在限制已编译的 class 文件,并告诉我们应该将它放在 jar 中的什么位置,但是开发呢?
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
SLF4J 似乎可以使用多个模块。
Java 9 与 JEP-238 一起发布,这基本上允许我们发布 运行time classes 的多个版本。问题是maven如何支持这个JEP?
- 我的意思是如何以及在何处配置 Maven 中的多个版本?我知道我可以 运行 一个 ant 任务,但是我可以用 maven-compiler 插件或其他标准化方式来完成吗?
- 我应该在哪里以及如何放置不同版本的 java classes? JEP 正在限制已编译的 class 文件,并告诉我们应该将它放在 jar 中的什么位置,但是开发呢?
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
SLF4J 似乎可以使用多个模块。