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?
maven-compiler-plugin:3.8.0
, um den obigen Fehler zu beheben .Antworten:
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.0
Version eine Version von 9,10,11 ohne explizite Abhängigkeiten angegeben werden .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-plugin
beim 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 .
quelle
maven.compiler.release
:<properties><maven.compiler.release>11</maven.compiler.release></properties>
AKTUALISIEREN
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:Sie finden die neuesten Informationen unter https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav
quelle
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.
quelle
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:
Es gibt zurück:
Inkompatible Version
Hier oben läuft mein Maven mit
Java Version 1.8.0_151
. Selbst wenn ich einen Maven zum Kompilieren spezifiziereJava 11
:Dieser Fehler wird logisch ausgedruckt:
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:ergibt
Das ist viel besser und korrekter, um Code zu kompilieren, der mit den Java 11-Spezifikationen geschrieben wurde.
quelle
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
Alternativ können Sie das Maven-Compiler-Plugin vollständig angeben. Siehe vorherige Antworten. In meinem Beispiel ist es kürzer :)
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 install
erneut 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.
Ich habe einige Schnellstartprojekte erstellt, die ich in anderen meiner Projekte wiederverwenden kann. Sie können Folgendes überprüfen:
quelle
Wenn Sie Spring Boot verwenden, fügen Sie diese Tags in pom.xml hinzu.
und
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
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.
quelle
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!
quelle