177 votes

Impossible de compiler un simple projet Java 10 / Java 11 avec Maven

J'ai un projet Maven trivial :

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>

Lorsque je construis le projet via mvn -X install -DskipTests=true il échoue :

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

Y a-t-il un moyen de résoudre ce problème ?

1 votes

@MikhailKholodkov Le bug a été résolu et on peut désormais utiliser le maven-compiler-plugin:3.8.0 pour corriger l'erreur ci-dessus .

254voto

nullpointer Points 1135

Depuis le 30 juillet 2018, pour résoudre le problème ci-dessus, il est possible de configurer la version de java utilisée dans maven jusqu'à la version JDK/11 et d'utiliser l'outil de gestion des versions de java. maven-compiler-plugin:3.8.0 pour spécifier une version de 9,10,11 sans dépendances explicites .

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

Note :- La valeur par défaut de la source/cible est passée de 1.5 à 1.6 avec cette version. -- notes de mise à jour.


Editer [30.12.2018]

En fait, vous pouvez utiliser la même version de maven-compiler-plugin tout en compilant le code contre JDK/12 également.

Plus de détails et un exemple de configuration dans comment Compiler et exécuter une fonction d'aperçu de JDK avec Maven .

8 votes

Cela ne fonctionne que lorsque maven est exécuté avec Java 11. Si la version de votre plate-forme Java est, par exemple, Java 8 (et que maven est donc exécuté avec Java 8), vous devez définir un toolchain maven.apache.org/guides/mini/guide-using-toolchains.html

9 votes

Notez que la propriété associée est maven.compiler.release : <properties><maven.compiler.release>11</maven.compiler.relea‌​se></properties>

0 votes

@OlivierGrégoire - Donc, on peut remplacer ce code par celui que vous avez donné ? <properties> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> </properties>.

142voto

orionll Points 1045

UPDATE

La réponse est désormais obsolète. Voir cette réponse .


maven-compiler-plugin dépend de l'ancienne version d'ASM qui ne prend pas encore en charge Java 10 (et Java 11). Cependant, il est possible de spécifier explicitement la bonne version d'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>

Vous pouvez trouver les dernières informations à l'adresse suivante https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav

37voto

KeyMaker00 Points 1174

Ce n'est peut-être pas exactement la même erreur, mais j'en ai eu une similaire.

Vérifier la version Java de Maven

Comme Maven fonctionne également avec Java, vérifiez d'abord sur quelle version fonctionne votre Maven :

mvn --version | grep -i java 

Il revient :

Java version 1.8.0_151, fournisseur : Oracle Corporation, runtime : C:\tools\jdk\openjdk1.8

Version incompatible

Ci-dessus, mon maven fonctionne avec Java Version 1.8.0_151 . Donc même si je spécifie à maven de compiler avec 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>

Cette erreur s'affichera logiquement :

[ERROR] Échec de l'exécution du but org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) sur le projet efa-example-commons-task : Erreur fatale compilation : cible invalide release : 11 -> [Aide 1]

Comment définir une version spécifique de Java dans Maven ?

La chose logique à faire est de définir une version de Java plus élevée pour Maven (par exemple, la version 11 de Java au lieu de la version 1.8).

Maven utilise la variable d'environnement JAVA_HOME pour trouver la version de Java à exécuter. Changez donc cette variable pour le JDK contre lequel vous voulez compiler (par exemple, OpenJDK 11).

Contrôle de la santé

Puis recommencer à courir mvn --version pour s'assurer que la configuration a été prise en charge :

mvn --version | grep -i java

donne

Java version : 11.0.2, vendor : Oracle Corporation, runtime : C:\tools\jdk\openjdk11

Ce qui est bien meilleur et correct pour compiler du code écrit avec les spécifications de Java 11.

2 votes

Cela a fonctionné pour moi, même avec la version 3.2.0 de maven-assembly-plugin.

31voto

Yan Khonski Points 3227

Spécifiez les versions source et cible de maven.compiler.

1) Version de Maven qui supporte le jdk que vous utilisez. Dans mon cas, JDK 11 et maven 3.6.0.

2) pom.xml

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

Comme alternative, vous pouvez spécifier entièrement le plugin de compilateur maven. Voir les réponses précédentes. C'est plus court dans mon exemple :)

<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) reconstruire le projet pour éviter les erreurs de compilation dans votre IDE.

4) Si cela ne fonctionne toujours pas. Dans Intellij Idea, je préfère utiliser le terminal plutôt que le terminal de l'OS. Ensuite, dans Idea, allez dans fichier -> paramètres -> outils de construction -> maven. Je travaille avec maven que j'ai téléchargé depuis apache (par défaut Idea utilise maven intégré). Redémarrez ensuite Idea et exécutez mvn clean install encore. Vérifiez également que vous avez bien Chemin d'accès , MAVEN_HOME , JAVA_HOME les variables d'environnement.

J'ai aussi vu cette phrase, mais elle ne fonctionne pas.

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

J'ai réalisé quelques projets de démarrage rapides, que je réutilise dans d'autres de mes projets, n'hésitez pas à vérifier :

27voto

MiguelMunoz Points 316

Stimuler votre maven-compiler-plugin a 3.8.0 semble être nécessaire mais pas suffisante. Si vous rencontrez toujours des problèmes, vous devriez également vous assurer que votre JAVA_HOME est définie sur Java 10 (ou 11) si vous utilisez la ligne de commande. (Le message d'erreur que vous obtiendrez ne vous le dira pas.) Ou si vous vous exécutez depuis un IDE, vous devez vous assurer qu'il est configuré pour exécuter maven avec votre JDK actuel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X