我有一个适用于Java 8的jar。
我想创建一个 new jar,它将是Multi-Release JAR但是空的,只需要修补' META-INF/versions
中的课程。
我想要一个单独的jar,所以人们可以将它包含在Java9中,否则,他们使用默认的jar。为什么?因为还没有为Java9 MR-Jars准备这么多工具。
这可能吗? Java9 MR-Jar会覆盖其他jar的类吗?
Multi-Release jar背后的想法是它们提供简单的补丁。以我的拙见,MR罐子的工作方式并不令人满意。
我有两个原因可以制作2个独立的罐子:
java
,java8
和java9
这样的文件夹...然后让构建产生两个罐子,两个poms ......是的,祝你好运。jre8
版本的jre8
版本。只是因为有Java9版本!以下是故事:
我的A
是一个基于Java8构建的Java库,但打包为Multi-Release Jar,这意味着它包含了在Java9上运行jar时的其他类。另外的类是在JDK9上单独构建的,我手动复制它们(是的,我知道,但它现在可以工作)。
不幸的是,一些工具和服务器(Jetty)不知道MR Jars,这使得他们 NOT 工作。
出于这个原因,我的库有A-jre8
版本,没有任何额外的类,所以服务器可以使用它。
但是,如果用户使用依赖于B
的库A
,他仍会获得A
的MRJar版本,这将再次失败。我希望能够以某种方式阻止这种情况。而我无法对B
说:嘿,你可以B-jre8
吗?
JAR只是打包!
就我而言,我只会包含A.jar9
,Java会将A.jar
和A.jar9
视为一个包。无需META-INF/versions
。很干净。而且,最重要的是,它会有助于上述情况!如果在Java8上运行,jar9
jar将没有任何区别;如果在Java9上运行,jar9
jar将使用相同的名称修补jar
。就那么简单。没有传递依赖地狱。
META-INF/versions
。普通的Oracle,你听说过类路径扫描吗?您是否至少可以将versions
中的类重命名为例如*.class9
所以不要被现有的类路径扫描程序捕获。
答案 0 :(得分:0)
就像今天(Java v9.0.4) - 否。