Java 9与JEP-238一起发布,它基本上允许我们发布多个版本的运行时类.问题是maven如何支持这个JEP?
我的意思是如何以及在哪里配置 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链接或在下面的分析之一中作为提案列出(无法找到其已发布的实现)。
注意:难道人们不应该更愿意转向JMOD
s 而不是考虑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)
我找不到开源/组织使用这些提案的官方文档或实现,因此推断目前使用 Maven 不太可能。
归档时间: |
|
查看次数: |
1080 次 |
最近记录: |