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
ytest-jar
). - El problema NO aparece si no se especifican objetivos . Pero esta no es una opción, ya que realmente necesito tanto
jar
comotest-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>
Si sus registros muestran algo como:
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ test --
[WARNING] JAR will be empty - no content was marked for inclusion!
Añadir una sola clase inútil en src / main / java parece resolver el problema, vea: