14

I just upgraded my Java8 project with the brand new official release of Java9.

The project uses a Maven plugin, org.apache.maven.plugins:maven-jar-plugin version 2.6. When I run mvn clean install I now get the following exception:

ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar (default-jar) on project my-test-utils: Execution default-jar of goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar failed: An API incompatibility was encountered while executing org.apache.maven.plugins:maven-jar-plugin:2.6:jar: java.lang.ExceptionInInitializerError: null
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.apache.maven.plugins:maven-jar-plugin:2.6
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/Users/jeanvaljean/.m2/repository/org/apache/maven/plugins/maven-jar-plugin/2.6/maven-jar-plugin-2.6.jar
[ERROR] urls[1] = file:/Users/jeanvaljean/.m2/repository/org/slf4j/slf4j-jdk14/1.5.6/slf4j-jdk14-1.5.6.jar
[ERROR] urls[2] = file:/Users/jeanvaljean/.m2/repository/org/slf4j/jcl-over-slf4j/1.5.6/jcl-over-slf4j-1.5.6.jar
[ERROR] urls[3] = file:/Users/jeanvaljean/.m2/repository/org/apache/maven/reporting/maven-reporting-api/2.2.1/maven-reporting-api-2.2.1.jar
[ERROR] urls[4] = file:/Users/jeanvaljean/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.1/doxia-sink-api-1.1.jar
[ERROR] urls[5] = file:/Users/jeanvaljean/.m2/repository/org/apache/maven/doxia/doxia-logging-api/1.1/doxia-logging-api-1.1.jar
[ERROR] urls[6] = file:/Users/jeanvaljean/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[ERROR] urls[7] = file:/Users/jeanvaljean/.m2/repository/commons-cli/commons-cli/1.2/commons-cli-1.2.jar
[ERROR] urls[8] = file:/Users/jeanvaljean/.m2/repository/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.jar
[ERROR] urls[9] = file:/Users/jeanvaljean/.m2/repository/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar
[ERROR] urls[10] = file:/Users/jeanvaljean/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar
[ERROR] urls[11] = file:/Users/jeanvaljean/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar
[ERROR] urls[12] = file:/Users/jeanvaljean/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.11/plexus-interpolation-1.11.jar
[ERROR] urls[13] = file:/Users/jeanvaljean/.m2/repository/org/apache/maven/maven-archiver/2.6/maven-archiver-2.6.jar
[ERROR] urls[14] = file:/Users/jeanvaljean/.m2/repository/org/apache/maven/shared/maven-shared-utils/0.7/maven-shared-utils-0.7.jar
[ERROR] urls[15] = file:/Users/jeanvaljean/.m2/repository/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.jar
[ERROR] urls[16] = file:/Users/jeanvaljean/.m2/repository/org/codehaus/plexus/plexus-utils/3.0.20/plexus-utils-3.0.20.jar
[ERROR] urls[17] = file:/Users/jeanvaljean/.m2/repository/org/codehaus/plexus/plexus-archiver/2.9/plexus-archiver-2.9.jar
[ERROR] urls[18] = file:/Users/jeanvaljean/.m2/repository/org/codehaus/plexus/plexus-io/2.4/plexus-io-2.4.jar
[ERROR] urls[19] = file:/Users/jeanvaljean/.m2/repository/commons-io/commons-io/2.2/commons-io-2.2.jar
[ERROR] urls[20] = file:/Users/jeanvaljean/.m2/repository/org/apache/commons/commons-compress/1.9/commons-compress-1.9.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[maven.api, parent: null]]
[ERROR] 

Any hint on how to solve this?


I'm using Maven 3.3.9. mvn -version outputs:

 Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)
Maven home: /Users/jeanvaljean/Applications/maven/apache-maven-3.3.9
Java version: 9, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home
Default locale: en_IT, platform encoding: UTF-8
OS name: "mac os x", version: "10.12.3", arch: "x86_64", family: "mac"

The module that is failing is actually the first child module of the parent pom. It is surprisingly empty:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.7.RELEASE</version>
    </parent>

    <groupId>my.group</groupId>
    <artifactId>my-parent</artifactId>
    <version>0.1.0-SNAPSHOT</version>
    <packaging>pom</packaging>


    <modules>
        <module>test-utils</module>
        <module>commons</module>
        <module>validation</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>9</java.version>
        <tomcat.version>8.5.5</tomcat.version>
        <unit-tests.skip>true</unit-tests.skip>
        <integration-tests.skip>true</integration-tests.skip>

        <!-- PLUGINS -->
        <maven-compiler-plugin>3.6.2</maven-compiler-plugin>
        <maven-surefire-plugin>2.20.1</maven-surefire-plugin>
        <nexus-staging-maven-plugin>1.6.8</nexus-staging-maven-plugin>
        <maven-source-plugin>3.0.1</maven-source-plugin>
        <maven-javadoc-plugin>3.0.0-M1</maven-javadoc-plugin>
        <maven-gpg-plugin>1.6</maven-gpg-plugin>
        <versions-maven-plugin>2.4</versions-maven-plugin>
        <maven-scm-plugin>1.9.5</maven-scm-plugin>
    </properties>



    <prerequisites>
        <maven>3.0.4</maven>
    </prerequisites>

    <dependencies>
        <!-- SPRING BOOT -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>
    </dependencies>

    <build>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.2</version>
                <configuration>
                    <source>9</source>
                    <target>9</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>**/*AcceptanceTest.java</exclude>
                        <exclude>**/*IT.java</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>integration-test</phase>
                        <configuration>
                            <excludes>
                                <exclude>none</exclude>
                            </excludes>
                            <includes>
                                <include>**/*IT.java</include>
                            </includes>
                        </configuration>
                    </execution>
                    <execution>
                        <id>acceptance-test</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <phase>verify</phase>
                        <configuration>
                            <excludes>
                                <exclude>none</exclude>
                            </excludes>
                            <includes>
                                <include>**/*AcceptanceTest.java</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.5.201505241946</version>
                <executions>
                    <execution>
                        <id>default-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>default-check</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                            <goal>check</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <rule>
                                    <element>CLASS</element>
                                    <excludes>
                                        <!--<exclude>it.ozimov</exclude>-->
                                    </excludes>
                                    <limits>
                                        <limit>
                                            <counter>BRANCH</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0</minimum>
                                        </limit>
                                        <limit>
                                            <counter>LINE</counter>
                                            <value>COVEREDRATIO</value>
                                            <minimum>0</minimum>
                                        </limit>
                                    </limits>
                                </rule>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <generateBackupPoms>false</generateBackupPoms>
                </configuration>
            </plugin>



            <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>

        </plugins>
    </build>

</project>
JeanValjean
  • 17,172
  • 23
  • 113
  • 157
  • could you share your `mvn -version` output as well and are these the debug (`mvn clean install -X`) logs on your execution? could you share the relevant pom.xml as well in the question please – Naman Sep 21 '17 at 21:36
  • jar-plugin is not mentioned [here](https://cwiki.apache.org/confluence/display/MAVEN/Java+9+-+Jigsaw) but probably you also need to upgrade it to the latest version (3.0.2) – Oleg Sep 21 '17 at 21:44
  • 1
    @nullpointer I have copy pasted the output for `mvn -version`. I will add the pom soon. Thanks – JeanValjean Sep 21 '17 at 21:57
  • @nullpointer I'm having troubles in extracting the pom (the prohect has 12 maven modules). What do you think I should report? – JeanValjean Sep 21 '17 at 22:12
  • @JeanValjean The `pom.xml` of the module where you tried to run the command (mvn clean install) from OR if it has a parent that governs the build configurations for it. – Naman Sep 21 '17 at 22:14
  • @nullpointer done, it was actually the first child module, and is quite dumb – JeanValjean Sep 21 '17 at 22:26
  • As already said, *OR if it has a parent that governs the build configurations for it.* since it doesn't declare anything, its parent does. Could you remove this and share parent's pom instead. – Naman Sep 21 '17 at 22:27
  • Sure. I will. Anyway, may it be related to the plexus archiver are mentioned [here](https://stackoverflow.com/questions/36583118/is-maven-ready-for-jdk9)? – JeanValjean Sep 21 '17 at 22:31
  • @JeanValjean That depends on the version of plugins you're using. – Naman Sep 21 '17 at 22:34
  • @nullpointer parent pom added – JeanValjean Sep 21 '17 at 22:35
  • @JeanValjean Have made an answer since its was too big for comments anyway. – Naman Sep 21 '17 at 22:39
  • A small advice, use 9 instead of source/target. This will ensure your code will only use Java9 signatures no matter the actual version of the JDK (e.g. 18.3) – Robert Scholte Sep 27 '17 at 19:45
  • This issue happens with JDK 10 as well. – naXa stands with Ukraine Mar 23 '18 at 13:49

2 Answers2

22

The chances are mostly of an incompatible maven-plugin version in your module. You could try to update the plugin configuration in the parent module to the following and test:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>1.9</source>
                <target>1.9</target>
                <jdkToolchain>
                    <version>9</version>
                </jdkToolchain>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.0.2</version>
        </plugin>
    </plugins>
</build>

For the list of compatible versions of all the plugins, do refer to Maven#Java9+Jigsaw

Naman
  • 27,789
  • 26
  • 218
  • 353
  • 1
    So, I upgraded all the plugins. I have another failure now (`Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test`), so I consider this issue solved. – JeanValjean Sep 21 '17 at 22:42
  • @JeanValjean Possibly a test issue this time. – Naman Sep 21 '17 at 22:45
  • 1
    I disabled the plugin for now. I'd like to see the app running. I have another issue related to a JOOQ plugin. I'll create another question. Thanks for the help – JeanValjean Sep 21 '17 at 22:46
  • 1
    A similar error also happened to me when upgrading a project from JDK 11 to 13. Updating the `maven-assembly-plugin` to the latest version (from 2.6 to 3.2.0 in this case) fixed the issue as well. – Danilo Teodoro Nov 20 '19 at 13:27
0

I had the latest maven version 3.6.3. But I realized there is a mismatch in the java version set in my environment path config to the one installed in my IDE (IntelliJ).

I configured to the latest JDK version (for 1.8) in my IDE to 1.8.0_265 enter image description here

I set my environment path to the same version enter image description here

You can configure JAVA_HOME, JRE_HOME, JDK_HOME here. Also, make sure the path is added. enter image description here

Reference on how to set environment variables: https://stackoverflow.com/a/26640589/2889297

Maven homepage gives you a high-level idea on what should be the compatible java version https://maven.apache.org/install.html

Note: After updating the environment path and before running mvn clean install, make sure the version is correctly reflected in the IDE terminal. You will have to close and reopen your IDE for the changes to be reflected.

Devendra Lattu
  • 2,732
  • 2
  • 18
  • 27