Ich habe ein einfaches 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 mvn -X install -DskipTests=true
erstelle, schlägt dies 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?
Die Antwort ist jetzt veraltet. Siehe diese Antwort .
maven-compiler-plugin
hä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
Alternativ kann ab dem 30. Juli 2018 zur Behebung des obigen Problems die in maven verwendete Java -Version für alle bis zu JDK/11-Versionen konfiguriert und die - -Version verwendet werden. maven-compiler-plugin:3.8.0
, um eine Version von entweder 9,10,11 ohne explizite Abhängigkeiten anzugeben.
_<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 dieselbe Version von _maven-compiler-plugin
_ verwenden, während Sie den Code auch für JDK/12 kompilieren.
Weitere Details und eine Beispielkonfiguration finden Sie unter Kompilieren einer JDK12-Vorschaufunktion mit Maven .
Ein 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 die Umgebungsvariable Java_HOME auf Java 10 (oder 11) gesetzt ist, wenn Sie von der Befehlszeile aus ausführen. (Die Fehlermeldung, die Sie erhalten, wird Ihnen dies nicht mitteilen.) Wenn Sie eine IDE verwenden, müssen Sie sicherstellen, dass sie so eingestellt ist, dass sie mit Ihrem aktuellen JDK ausgeführt wird.
Es ist vielleicht nicht genau derselbe Fehler, aber ich hatte einen ähnlichen.
Maven Java -Version prüfen
Da Maven auch mit Java läuft, überprüfen Sie zuerst, mit welcher Version Ihr Maven läuft:
mvn --version | grep -i Java
Es gibt zurück:
Java-Version 1.8.0_151, Anbieter: Oracle Corporation, Laufzeit: C:\tools\jdk\openjdk1.8
Inkompatible Version
Hier oben rennt mein Maven mit Java Version 1.8.0_151
. Also auch wenn ich maven zum kompilieren mit Java 11
spezifiziere:
<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 (Standard-Kompilieren) im Projekt efa-example-commons-task: Schwerwiegender Fehler beim Kompilieren: Ungültige Zielversion: 11 -> [Hilfe 1]
Wie man eine bestimmte Java Version auf Maven setzt
Es ist logisch, eine höhere Java Version für Maven festzulegen (z. B. Java Version 11 statt 1.8).
Maven verwendet die Umgebungsvariable Java_HOME
, um die auszuführende Version Java zu ermitteln. Ändern Sie diese Variable in das JDK, mit dem Sie kompilieren möchten (z. B. OpenJDK 11).
Hygienekontrolle
Führen Sie dann mvn --version
erneut aus, um sicherzustellen, dass für die Konfiguration gesorgt wurde:
mvn --version | grep -i Java
ausbeuten
Java-Version: 11.0.2, Anbieter: Oracle Corporation, Laufzeit: C:\tools\jdk\openjdk11
Welches ist viel besser und korrekt, um Code zu kompilieren, der mit den Spezifikationen Java 11 geschrieben wurde.
Geben Sie die Quell- und Zielversion von maven.compiler.source an.
1) Maven-Version, die jdk unterstützt, das Sie verwenden. 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 Terminal anstelle der Verwendung von Terminal aus dem Betriebssystem. Dann gehen Sie in Idea zu Datei -> Einstellungen -> Build-Tools -> Maven. Ich arbeite mit Maven, die ich von Apache heruntergeladen habe (standardmäßig verwendet Idea gebündelte Maven). Starten Sie Idea dann neu und führen Sie mvn clean install
erneut aus. Stellen Sie außerdem sicher, dass Sie die korrekten Umgebungsvariablen Path, MAVEN_HOME, Java_HOME haben.
Ich habe auch diesen Einzeiler gesehen, aber er funktioniert nicht.
<maven.compiler.release>11</maven.compiler.release>