Impossibile compilare un semplice progetto Java 10 / Java 11 con Maven


134

Ho un banale progetto Maven:

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>

Quando creo il progetto tramite mvn -X install -DskipTests=true, non riesce:

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

C'è un modo per risolvere questo problema?


1
@MikhailKholodkov Il bug è stato risolto e si può ora usare il maven-compiler-plugin:3.8.0per correggere l'errore sopra .
Naman,

Risposte:


163

A partire dal 30 luglio 2018 per risolvere il problema di cui sopra, è possibile configurare la versione java utilizzata all'interno di Maven su qualsiasi fino a JDK / 11 e utilizzare il maven-compiler-plugin:3.8.0per specificare una versione di 9,10,11 senza alcuna dipendenza esplicita .

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

Nota : - Il valore predefinito per origine / destinazione è stato aumentato da 1,5 a 1,6 con questa versione. - note di rilascio.


Modifica [30.12.2018]

In effetti, è possibile utilizzare la stessa versione maven-compiler-plugindurante la compilazione del codice anche su JDK / 12.

Maggiori dettagli e una configurazione di esempio su come compilare ed eseguire una funzione di anteprima JDK con Maven .


6
Funziona solo quando maven viene eseguito con Java 11. Se la tua versione Java della piattaforma è ad esempio Java 8 (e quindi maven viene eseguita con Java 8), devi definire una toolchain maven.apache.org/guides/mini /guide-using-toolchains.html
Franz Deschler,

8
La proprietà associata è maven.compiler.release:<properties><maven.compiler.release>11</maven.compiler.release></properties>
Olivier Grégoire,

@ OlivierGrégoire - Quindi, possiamo sostituire questo codice con quello che hai dato? <properties> <maven.compiler.target> 1.8 </maven.compiler.target> <maven.compiler.source> 1.8 </maven.compiler.source> </properties>
MasterJoe

1
@ MasterJoe2 Sì, dovresti essere in grado di farlo, dato che stai aggiornando a Java-11.
Naman,

136

AGGIORNARE

La risposta è ora obsoleta. Vedere questa risposta .


maven-compiler-plugindipende dalla vecchia versione di ASM che non supporta ancora Java 10 (e Java 11). Tuttavia, è possibile specificare esplicitamente la versione corretta di ASM:

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

Puoi trovare le ultime novità su https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav


Considereresti di cambiare la risposta accettata a quella proposta all'inizio del tuo post?
leopal

24

Potenziare il tuo plugin-compilatore-maven a 3.8.0 sembra essere necessario ma non sufficiente. Se i problemi persistono, è necessario assicurarsi anche che la variabile di ambiente JAVA_HOME sia impostata su Java 10 (o 11) se si esegue dalla riga di comando. (Il messaggio di errore che ricevi non ti dirà questo.) O se stai correndo da un IDE, devi assicurarti che sia impostato per funzionare maven con il tuo JDK corrente.


14

Potrebbe non essere esattamente lo stesso errore, ma ho avuto uno simile.

Controlla la versione Java di Maven

Poiché Maven funziona anche con Java, controlla prima con quale versione è in esecuzione il tuo Maven:

mvn --version | grep -i java 

Restituisce:

Versione Java 1.8.0_151, fornitore: Oracle Corporation, runtime: C: \ tools \ jdk \ openjdk1.8

Versione incompatibile

Qui sopra la mia maven sta correndo Java Version 1.8.0_151. Quindi, anche se specifico maven con cui compilare 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>

Logicamente stamperà questo errore:

[ERRORE] Impossibile eseguire l'obiettivo org.apache.maven.plugins: maven-compilatore-plugin: 3.8.0: compilare (compilazione predefinita) sul progetto efa-esempio-commons-task: compilazione errore fatale: rilascio obiettivo non valido: 11 -> [Aiuto 1]

Come impostare la versione specifica di Java su Maven

La cosa logica da fare è impostare una versione Java superiore su Maven (es. Java versione 11 anziché 1.8).

Maven utilizza la variabile d'ambiente JAVA_HOMEper trovare la versione Java da eseguire. Quindi cambia questa variabile nel JDK che vuoi compilare (es. OpenJDK 11).

Controllo sanitario

Quindi eseguire nuovamente mvn --versionper assicurarsi che la configurazione sia stata curata:

mvn --version | grep -i java

i rendimenti

Versione Java: 11.0.2, fornitore: Oracle Corporation, runtime: C: \ tools \ jdk \ openjdk11

Che è molto meglio e corretto per compilare il codice scritto con le specifiche Java 11.


1
Questo ha funzionato per me, anche quando ho usato maven-assembly-plugin versione 3.2.0
Gérard Binkhorst,

13

Specificare maven.compiler.source e versioni di destinazione.

1) Versione Maven che supporta jdk che usi. Nel mio caso JDK 11 e maven 3.6.0.

2) pom.xml

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

In alternativa, puoi specificare completamente il plug-in del compilatore Maven. Vedi le risposte precedenti. Nel mio esempio è più breve :)

<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) ricostruire il progetto per evitare errori di compilazione nell'IDE.

4) Se continua a non funzionare. In Intellij Idea preferisco usare il terminale invece di usare il terminale dal sistema operativo. Quindi in Idea vai su file -> impostazioni -> strumenti di costruzione -> maven. Lavoro con Maven che ho scaricato da Apache (per impostazione predefinita Idea utilizza Maven in bundle). Riavvia quindi Idea ed esegui di mvn clean installnuovo. Assicurati anche di avere le variabili di ambiente Path , MAVEN_HOME , JAVA_HOME corrette .

Ho visto anche questo one-liner, ma non funziona.

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

Ho realizzato alcuni progetti di avvio rapido, che riutilizzo in altri miei progetti, non esitate a controllare:


2

Se si utilizza l'avvio di primavera, aggiungere questi tag in pom.xml.

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

e

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

Puoi cambiare la versione di Java in 11 o 13 anche nel <maven.compiler.release>tag.

Basta aggiungere i tag di seguito in pom.xml

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

È possibile modificare da 11 a 10, 13 e anche per cambiare la versione java. Sto usando Java 13 che è l'ultimo. Per me funziona.


0

Va bene, quindi per me niente ha funzionato.
Stavo usando lo stivale a molla con ibernazione. La versione di avvio a molla era ~ 2.0.1 e continuavo a ricevere questo errore e l'eccezione del puntatore null al momento della compilazione. Il problema era con l'ibernazione che aveva bisogno di un bump della versione. Ma successivamente ho avuto altri problemi che sembravano non essere stati riconosciuti dal processore di annotazioni, quindi ho deciso di superare la primavera dalla 2.0.1 alla 2.1.7 e tutto ha funzionato come previsto.

Devi ancora aggiungere il plug-in sopra duro
Spero che ti aiuti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.