it-swarm.com.de

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

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?

109
ZhekaKozlov

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:

<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

126
ZhekaKozlov

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 .

118
Naman

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.

21
MiguelMunoz

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.

4
KeyMaker00

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>
1
Yan Khonski