Maven是否已为JDK9做好准备?

Kar*_*ell 52 maven-3 maven java-9

今天我尝试了最新的jdk9 Build 113,并尝试使用最新的Maven 3.3.9 编译我的项目

这些是命令(部分通过twitter发现)

export MVN_OPTS="-Dmaven.compiler.fork -Dmaven.compiler.executable=/somewhere/Downloads/jdk-9/bin/javac"
export JAVA_HOME="/somewhere/Downloads/jdk-9"
mvn clean install
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误 ......简而言之:

[WARNING] Error injecting: org.codehaus.plexus.archiver.jar.JarArchiver
java.lang.ExceptionInInitializerError
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(java.base@9-ea/Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(java.base@9-ea/NativeConstructorAccessorImpl.java:62)

...

at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
    at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.<clinit>(AbstractZipArchiver.java:116)
    ... 89 more
[WARNING] Error injecting: org.apache.maven.plugin.jar.JarMojo
java.lang.ExceptionInInitializerError
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(java.base@9-ea/Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(java.base@9-ea/NativeConstructorAccessorImpl.java:62)

...

at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
    at org.codehaus.plexus.archiver.zip.AbstractZipArchiver.<clinit>(AbstractZipArchiver.java:116)
    ... 89 more
Run Code Online (Sandbox Code Playgroud)

什么是正确的maven配置或用于JDK9的参数?

$ mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)
Maven home: /home/somewhere/Downloads/maven
Java version: 9-ea, vendor: Oracle Corporation
Java home: /home/somewhere/Downloads/jdk-9
Default locale: en_US, platform encoding: UTF-8
OS name: "linux",...
Run Code Online (Sandbox Code Playgroud)

Mic*_*l-O 38

以下是Maven PMC成员(我)的回答:

不它不是.Robert Scholte正在研究它.拼图和其他东西引入了很多变化.没有正式的时间框架将提供完整的compat(Maven +官方插件).

你看到的问题实际上不是Maven而是Plexus Archiver.请参阅他们的GitHub页面.如果您认为可以增加价值,请联系maven-dev邮件列表.

进度文档:https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw

  • 啊,非常感谢!我以为我读到某个地方已经有可能了.你的意思是这个github回购?https://github.com/codehaus-plexus/plexus-archiver/issues (3认同)

小智 16

是的,现在已经准备好了.还有一些事情正在进行中,但通常可以使用.看看我的一个项目为例.

  • 您共享的项目使用编译器和jar插件,但我们将获得更多插件,如jlink,jmod,jdeps.该项目不提供自动模块和未命名模块的示例.我认为Maven团队仍在研究它们. (2认同)

Kar*_*ell 11

更新:现在应该没有此解决方法.

这个问题已经从plexus Archiver团队修复,但还没有发布 - 感谢Michael-O将我指向正确的地方:)!

现在,从PR 12中的 ctomc发布了一个解决方法,使用旧的plexus归档器版本2.4.4:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4.1</version>                    
    <dependencies>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-archiver</artifactId>
            <version>2.4.4</version>
        </dependency>
    </dependencies>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.6</version>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-archiver</artifactId>
            <version>2.4.4</version>
        </dependency>
    </dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)