Einfaches Java 10 / Java 11-Projekt mit Maven kann nicht kompiliert werden


133

Ich habe ein triviales Maven-Projekt:

src
└── main
    └── java
        └── module-info.java
pom.xml

pom.xml:

<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>example</name>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>10</release>
            </configuration>
        </plugin>
    </plugins>
</build>

Wenn ich das Projekt über erstelle mvn -X install -DskipTests=true, schlägt es fehl:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile (default-testCompile) on project example: Execution default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile failed.
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile failed.
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:145)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
        ... 20 more
Caused by: java.lang.IllegalArgumentException
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.codehaus.plexus.languages.java.jpms.AsmModuleInfoParser.parse(AsmModuleInfoParser.java:80)
        at org.codehaus.plexus.languages.java.jpms.AsmModuleInfoParser.getModuleDescriptor(AsmModuleInfoParser.java:54)
        at org.codehaus.plexus.languages.java.jpms.LocationManager.resolvePaths(LocationManager.java:83)
        at org.apache.maven.plugin.compiler.TestCompilerMojo.preparePaths(TestCompilerMojo.java:281)
        at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:762)
        at org.apache.maven.plugin.compiler.TestCompilerMojo.execute(TestCompilerMojo.java:176)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
        ... 21 more

Gibt es eine Möglichkeit, dies zu beheben?


1
@MikhailKholodkov Der Fehler wurde behoben und man kann jetzt die verwenden maven-compiler-plugin:3.8.0, um den obigen Fehler zu beheben .
Naman

Antworten:


161

Ab dem 30. Juli 2018 kann zur Behebung des oben genannten Problems die in maven verwendete Java-Version für alle bis zu JDK / 11 konfiguriert und mithilfe der maven-compiler-plugin:3.8.0Version eine Version von 9,10,11 ohne explizite Abhängigkeiten angegeben werden .

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>11</release>  <!--or <release>10</release>-->
    </configuration>
</plugin>

Hinweis : - Der Standardwert für Quelle / Ziel wurde mit dieser Version von 1,5 auf 1,6 angehoben. - Versionshinweise.


Bearbeiten [30.12.2018]

Tatsächlich können Sie maven-compiler-pluginbeim Kompilieren des Codes auch gegen JDK / 12 dieselbe Version von verwenden .

Weitere Details und eine Beispielkonfiguration zum Kompilieren und Ausführen einer JDK-Vorschaufunktion mit Maven .


6
Dies funktioniert nur dann sofort, wenn Maven mit Java 11 ausgeführt wird. Wenn Ihre Plattform-Java-Version z. B. Java 8 ist (und Maven daher mit Java 8 ausgeführt wird), müssen Sie eine Toolchain maven.apache.org/guides/mini
Franz Deschler

8
Beachten Sie, dass die zugehörige Eigenschaft ist maven.compiler.release:<properties><maven.compiler.release>11</maven.compiler.release></properties>
Olivier Grégoire

@ OlivierGrégoire - Also können wir diesen Code durch den von Ihnen angegebenen ersetzen? <properties> <maven.compiler.target> 1.8 </maven.compiler.target> <maven.compiler.source> 1.8 </maven.compiler.source> </ property>
MasterJoe2

1
@ MasterJoe2 Ja, das sollten Sie tun können, vorausgesetzt, Sie aktualisieren auf Java-11.
Naman

136

AKTUALISIEREN

Die Antwort ist jetzt veraltet. Siehe diese Antwort .


maven-compiler-pluginhängt von der alten Version von ASM ab, die Java 10 (und Java 11) noch nicht unterstützt. Es ist jedoch möglich, die richtige Version von ASM explizit anzugeben:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
        <release>10</release>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>6.2</version> <!-- Use newer version of ASM -->
        </dependency>
    </dependencies>
</plugin>

Sie finden die neuesten Informationen unter https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav


Würden Sie in Betracht ziehen, die akzeptierte Antwort in die zu Beginn Ihres Beitrags vorgeschlagene zu ändern?
Leopal

24

Das Boosten Ihres Maven-Compiler-Plugins auf 3.8.0 scheint notwendig, aber nicht ausreichend zu sein. Wenn Sie weiterhin Probleme haben, sollten Sie auch sicherstellen, dass Ihre Umgebungsvariable JAVA_HOME auf Java 10 (oder 11) festgelegt ist, wenn Sie über die Befehlszeile ausgeführt werden. (Die Fehlermeldung, die Sie erhalten, sagt Ihnen dies nicht.) Wenn Sie von einer IDE ausgeführt werden, müssen Sie sicherstellen, dass Maven mit Ihrem aktuellen JDK ausgeführt wird.


14

Es ist vielleicht nicht genau der gleiche Fehler, aber ich hatte einen ähnlichen.

Überprüfen Sie die Maven Java-Version

Da Maven auch mit Java ausgeführt wird, überprüfen Sie zunächst, mit welcher Version Ihr Maven ausgeführt wird:

mvn --version | grep -i java 

Es gibt zurück:

Java Version 1.8.0_151, Hersteller: Oracle Corporation, Laufzeit: C: \ tools \ jdk \ openjdk1.8

Inkompatible Version

Hier oben läuft mein Maven mit Java Version 1.8.0_151. Selbst wenn ich einen Maven zum Kompilieren spezifiziere Java 11:

<properties>
    <java.version>11</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

Dieser Fehler wird logisch ausgedruckt:

[FEHLER] Fehler beim Ausführen des Ziels org.apache.maven.plugins: maven-compiler-plugin: 3.8.0: Kompilieren (Standardkompilieren) im Projekt efa-example-commons-task: Schwerwiegender Fehler beim Kompilieren: ungültige Zielversion: 11 -> [Hilfe 1]

So stellen Sie eine bestimmte Java-Version auf Maven ein

Es ist logisch, eine höhere Java-Version auf Maven zu setzen (z. B. Java-Version 11 statt 1.8).

Maven verwendet die Umgebungsvariable JAVA_HOME, um die auszuführende Java-Version zu finden. Ändern Sie diese Variable in das JDK, gegen das Sie kompilieren möchten (z. B. OpenJDK 11).

Gesundheitsüberprüfung

Führen Sie dann erneut aus mvn --version, um sicherzustellen, dass die Konfiguration durchgeführt wurde:

mvn --version | grep -i java

ergibt

Java-Version: 11.0.2, Hersteller: Oracle Corporation, Laufzeit: C: \ tools \ jdk \ openjdk11

Das ist viel besser und korrekter, um Code zu kompilieren, der mit den Java 11-Spezifikationen geschrieben wurde.


1
Dies funktionierte für mich auch bei Verwendung des Maven-Assembly-Plugins Version 3.2.0
Gérard Binkhorst

12

Geben Sie die Versionen maven.compiler.source und target an.

1) Maven-Version, die das von Ihnen verwendete JDK unterstützt. In meinem Fall JDK 11 und Maven 3.6.0.

2) pom.xml

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

Alternativ können Sie das Maven-Compiler-Plugin vollständig angeben. Siehe vorherige Antworten. In meinem Beispiel ist es kürzer :)

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
    </plugins>
</build>

3) Erstellen Sie das Projekt neu, um Kompilierungsfehler in Ihrer IDE zu vermeiden.

4) Wenn es immer noch nicht funktioniert. In Intellij Idea bevorzuge ich die Verwendung von Terminals anstelle von Terminals vom Betriebssystem. Gehen Sie dann in Idea zu Datei -> Einstellungen -> Tools erstellen -> Maven. Ich arbeite mit Maven, die ich von Apache heruntergeladen habe (standardmäßig verwendet Idea gebündelten Maven). Starten Sie Idea dann neu und führen Sie es mvn clean installerneut aus. Stellen Sie außerdem sicher, dass Sie über die richtigen Umgebungsvariablen Path , MAVEN_HOME und JAVA_HOME verfügen .

Ich habe auch diesen Einzeiler gesehen, aber er funktioniert nicht.

<maven.compiler.release>11</maven.compiler.release>

Ich habe einige Schnellstartprojekte erstellt, die ich in anderen meiner Projekte wiederverwenden kann. Sie können Folgendes überprüfen:


2

Wenn Sie Spring Boot verwenden, fügen Sie diese Tags in pom.xml hinzu.

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

und

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    `<maven.compiler.release>`10</maven.compiler.release>
</properties>

Sie können die Java-Version auch im <maven.compiler.release>Tag auf 11 oder 13 ändern .

Fügen Sie einfach die folgenden Tags in pom.xml hinzu

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.release>11</maven.compiler.release>
</properties>

Sie können auch die Werte 11 bis 10, 13 ändern, um die Java-Version zu ändern. Ich benutze Java 13, das ist die neueste. Für mich geht das.


0

Also gut, für mich hat nichts funktioniert.
Ich habe einen Frühlingsstiefel mit Winterschlaf verwendet. Die Spring-Boot-Version war ~ 2.0.1 und ich würde diesen Fehler und die Nullzeiger-Ausnahme beim Kompilieren weiterhin erhalten. Das Problem war der Ruhezustand, für den eine Versionserhöhung erforderlich war. Aber danach hatte ich einige andere Probleme, die so aussahen, als ob der Anmerkungsprozessor nicht erkannt wurde. Deshalb entschied ich mich, die Feder von Version 2.0.1 auf Version 2.1.7 zu erweitern, und alles funktionierte wie erwartet.

Sie müssen noch das obige Plugin hinzufügen.
Hoffe, es hilft!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.