java - que - maven tutorial español pdf
No se puede compilar un proyecto Java 10/Java 11 simple con Maven (5)
ACTUALIZAR
La respuesta ahora es obsoleta. Mira esta respuesta .
maven-compiler-plugin
depende de la versión anterior de ASM que aún no es compatible con Java 10 (y Java 11).
Sin embargo, es posible especificar explícitamente la versión correcta de 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>
Puede encontrar lo último en https://search.maven.org/search?q=g:org.ow2.asm%20AND%20a:asm&core=gav
Tengo un proyecto trivial de 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>
Cuando construyo el proyecto a través de
mvn -X install -DskipTests=true
, falla:
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
¿Hay alguna manera de arreglar esto?
Alternativamente, a partir del 30 de julio de 2018 para solucionar el problema anterior, se puede configurar la versión Java utilizada dentro de Maven para cualquier hasta JDK / 11 y hacer uso del
maven-compiler-plugin:3.8.0
para especificar una versión de 9 , 10,11
sin ninguna dependencia explícita
.
<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 : - El valor predeterminado para el origen / destino se ha elevado de 1.5 a 1.6 con esta versión. - Notas de la versión.
Editar [30.12.2018]
De hecho, puede hacer uso de la misma versión de
maven-compiler-plugin
mientras compila el código contra JDK / 12 también.
Más detalles y una configuración de muestra sobre cómo compilar una función de vista previa JDK12 con Maven .
Especifique maven.compiler.source y versiones de destino.
1) Versión Maven que admite jdk que utilizas. En mi caso JDK 11 y maven 3.6.0.
2) pom.xml
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
Como alternativa, puede especificar completamente el complemento del compilador maven. Ver respuestas anteriores. Es más corto en mi ejemplo :)
<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) reconstruya el proyecto para evitar errores de compilación en su IDE.
4) Si aún no funciona.
En Intellij Idea, prefiero usar terminal en lugar de usar terminal del sistema operativo.
Luego, en Idea, vaya a archivo -> configuración -> herramientas de compilación -> maven.
Trabajo con maven que descargué de apache (por defecto, Idea usa maven incluido).
Reinicie Idea y ejecute
mvn clean install
nuevamente.
También asegúrese de tener las variables de entorno
Path
,
MAVEN_HOME
,
JAVA_HOME
correctas.
También vi esta frase, pero no funciona.
<maven.compiler.release>11</maven.compiler.release>
Parece necesario aumentar su complemento de compilador maven a 3.8.0, pero no es suficiente. Si todavía tiene problemas, también debe asegurarse de que su variable de entorno JAVA_HOME esté configurada en Java 10 (u 11) si está ejecutando desde la línea de comandos. (El mensaje de error que recibe no le dirá esto). O si está ejecutando desde un IDE, debe asegurarse de que esté configurado para ejecutar maven con su JDK actual.
Puede que no sea exactamente el mismo error, pero tuve uno similar.
Verifique la versión Java de Maven
Dado que Maven también se está ejecutando con Java, verifique primero con qué versión se está ejecutando su Maven:
mvn --version | grep Java
Vuelve:
Java versión 1.8.0_151, proveedor: Oracle Corporation, tiempo de ejecución: C: / tools / jdk / openjdk1.8
Versión incompatible
Aquí arriba mi maven se está ejecutando con
Java Version 1.8.0_151
.
Entonces, incluso si especifico maven para compilar con
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>
Lógicamente imprimirá este error:
[ERROR] Error al ejecutar el objetivo org.apache.maven.plugins: maven-compiler-plugin: 3.8.0: compile (default-compile) on project efa-example-commons-task: Error fatal al compilar: versión de destino no válida: 11 -> [Ayuda 1]
Cómo configurar una versión específica de Java para Maven
Lo lógico es configurar una versión de Java superior a Maven (por ejemplo, Java versión 11 en lugar de 1.8).
Maven utiliza la variable de entorno
JAVA_HOME
para encontrar la versión de Java que se ejecutará.
Cambie esta variable al JDK con el que desea compilar (por ejemplo, OpenJDK 11).
Prueba de cordura
Luego ejecute nuevamente
mvn --version
para asegurarse de que la configuración ha sido atendida:
λ mvn --version | grep Java Java versión: 11.0.2, proveedor: Oracle Corporation, tiempo de ejecución: C: / tools / jdk / openjdk11
Lo cual es mucho mejor y correcto compilar código escrito con las especificaciones de Java 11.