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