with plugin example java maven jar maven-jar-plugin

java - with - maven-jar-plugin example



Maven JAR Plugin 3.0.2 Error: tiene que usar un clasificador para adjuntar artefactos suplementarios al proyecto en lugar de reemplazarlos (3)

El complemento JAR de Maven (versión 3.0.2) sigue lanzando el siguiente error, incluso para una sola invocación del objetivo jar :

[ERROR] Error al ejecutar el objetivo org.apache.maven.plugins: maven-jar-plugin: 3.0.2: jar (predeterminado) en la prueba del proyecto: tiene que usar un clasificador para adjuntar artefactos suplementarios al proyecto en lugar de reemplazarlos . -> [Ayuda 1]

Aquí hay un (¿mínimo?) pom.xml que demuestra el problema:

<project xmlns="http://maven.apache.org/POM/4.0.0"> <modelVersion>4.0.0</modelVersion> <groupId>test</groupId> <artifactId>test</artifactId> <version>1.0.0-SNAPSHOT</version> <build> <plugins> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <executions> <execution> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>

La invocación es solo el mvn package .

  • No parece importar si hay alguna clase / recurso: el mensaje de error anterior aparece de todos modos.
  • El problema también aparece si se especifican dos objetivos ( jar y test-jar ).
  • El problema NO aparece si no se especifican objetivos . Pero esta no es una opción, ya que realmente necesito tanto jar como test-jar .

De acuerdo con la documentation , el classifier solo debe especificarse en múltiples invocaciones del mismo objetivo, y hay un valor predeterminado razonable para el objetivo de test-jar que no pretendo cambiar.

Además, el problema no parece aparecer en la línea 2.x del complemento JAR.

¿Me he perdido algo? ¿Alguien podría por favor sugerir lo que estoy haciendo mal?

PS La versión de Maven es 3.3.9.


El plugin Jar se está ejecutando dos veces con la configuración:

<plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <executions> <execution> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>

Si revisa los registros con tal configuración, tendrá algo como:

[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ test --- [INFO] Building jar: .../test/target/test-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default) @ test --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------

lo que significa que el complemento de hecho se ejecutó dos veces. Lo que sucede es que el Plugin de Jar, en un proyecto que tiene un paquete de jar tiene una ejecución predeterminada vinculada a la fase del package . Esta ejecución predeterminada es la que se menciona en los registros con el ID de default-jar .

Cuando configuró una <execution> en el complemento, en realidad configuró una nueva ejecución, donde se invocará el objetivo jar del complemento. Dado que el objetivo jar vincula de forma predeterminada a la fase del package , esa ejecución se ejecuta en esa fase, después del enlace predeterminado inherente al empaquetado jar . Y dado que el complemento ya se ejecutó, está fallando porque ejecutarlo nuevamente reemplazaría al artefacto principal ya producido durante la primera ejecución. Este error se agregó en la versión 3.0.0 del complemento en MJAR-198 , porque es probable que ocurra algo así como una mala configuración que debe detectarse antes.

Como tal, la solución es simple: no tenga una ejecución que especifique el objetivo del jar , y deje que el predeterminado (que viene del paquete del jar ) haga el trabajo. El JAR se seguirá creando, incluso sin la configuración explícita del objetivo jar , gracias a la ejecución predeterminada. Si también desea un JAR de prueba, aún necesitará configurar el complemento para hacer eso con:

<plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <executions> <execution> <goals> <goal>test-jar</goal> </goals> </execution> </executions> </plugin>

Pero tenga en cuenta que el jar objetivo no está especificado.


En mi caso, he configurado la ID de la ejecución como tarro predeterminado, luego desapareció el error. p.ej

<execution> <id>default-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution>