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

时间:2017-10-04 05:27:22

标签: maven java-9

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

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

3 个答案:

答案 0 :(得分:3)

  

我的意思是在maven中配置多个版本的方式和位置?我知道我   可以运行一个ant任务,但我可以用maven-compiler插件或者   另一种标准化方式?

我认为maven-compiler-plugin不适合照顾释放,或者即使我们说蚂蚁任务。它本来应该编译一个项目的来源,寻求它的需要虽然引入了一个标志

-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实施而言,其中一个替代方案目前可以通过@simas链接或在下面列出作为提议(无法在其中一个分析中找到其发布的实现)

<子> 注意:对于转移到JMOD而不是考虑版本9及更高版本的MR-JAR,我们是否应该感兴趣?

  

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

在文档Java 9 and its Impact on Maven Projects中,要解决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

虽然可以在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日

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

答案 1 :(得分:0)

答案 2 :(得分:0)

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