web-dev-qa-db-fra.com

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

J'ai un projet trivial 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>

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 d'arranger cela?

109
ZhekaKozlov

MISE À JOUR

La réponse est maintenant 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 la dernière en date sur https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav

126
ZhekaKozlov

Alternativement, à compter du 30 juillet 2018, pour résoudre le problème ci-dessus, il est possible de configurer la version Java utilisée dans le maven de toutes les versions jusqu’à JDK/11 et d’utiliser le - maven-compiler-plugin:3.8.0 pour spécifier une version de 9,10,11 sans aucune dépendance explicite .

_<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 pour source/target est passée de 1,5 à 1,6 avec cette version . - notes de version.


Modifier [30.12.2018]

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

Plus de détails et un exemple de configuration pour savoir comment compiler une fonction de prévisualisation JDK12 avec Maven .

118
Naman

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

21
MiguelMunoz

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

Vérifier Maven Java Version

Etant donné que Maven fonctionne aussi avec Java, vérifiez d’abord avec quelle version votre Maven s’exécute:

mvn --version | grep -i Java 

Il retourne:

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

Version incompatible

Ci-dessus, mon compagnon tourne avec Java Version 1.8.0_151. Donc même si je spécifie que maven compile 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>

Il va logiquement imprimer cette erreur:

[ERREUR] Impossible d'exécuter le but org.Apache.maven.plugins: maven-compiler-plugin: 3.8.0: compiler (compilation par défaut) sur le projet efa-example-commons-task: Erreur irrécupérable de compilation: publication de la cible non valide: 11 -> [Aide 1]

Comment définir une version spécifique de Java sur Maven

La chose logique à faire est de définir une version Java supérieure sur Maven (par exemple, Java version 11 au lieu de 1.8).

Maven utilise la variable d’environnement Java_HOME pour rechercher la version Java à exécuter. Par conséquent, remplacez cette variable par le JDK contre lequel vous souhaitez compiler (par exemple, OpenJDK 11).

Contrôle de la santé mentale

Puis relancez mvn --version pour vous assurer que la configuration a bien été effectuée:

mvn --version | grep -i Java

les rendements

Version Java: 11.0.2, fournisseur: Oracle Corporation, exécution: C:\tools\jdk\openjdk11

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

4
KeyMaker00

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

1) La version Maven qui supporte jdk 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>

Alternativement, vous pouvez spécifier complètement le plugin maven compiler. 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) reconstruisez 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 un terminal que d’utiliser un terminal sous OS. Ensuite, dans Idea, accédez à 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 alors Idea et exécutez à nouveau mvn clean install. Assurez-vous également que vous disposez des variables d’environnement Path, MAVEN_HOME, Java_HOME correctes.

J'ai aussi vu ce one-line, mais ça ne marche pas.

<maven.compiler.release>11</maven.compiler.release>
1
Yan Khonski