Le plugin Maven JAR (version 3.0.2) continue de générer l'erreur suivante, même pour un seul appel de l'objectif jar
} _:
[ERREUR] Échec d'exécution du but org.Apache.maven.plugins: maven-jar-plugin: 3.0.2: jar (valeur par défaut) lors du test du projet: vous devez utiliser un classificateur pour associer des artefacts supplémentaires au projet au lieu de les remplacer. . -> [Aide 1]
Voici un (minimal?) pom.xml
qui illustre le problème:
<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>
L'invocation est simplement mvn package
.
jar
et test-jar
). jar
et test-jar
. Selon documentation , classifier
doit uniquement être spécifié pour plusieurs invocations du même objectif, et il existe une valeur par défaut raisonnable pour l'objectif test-jar
que je n'ai pas l'intention de modifier.
En outre, le problème ne semble pas apparaître sur la ligne 2.x du plug-in JAR.
Ai-je manqué quelque chose? Quelqu'un pourrait-il s'il vous plaît suggérer ce que je fais mal?
P.S. La version Maven est 3.3.9.
Le plugin Jar est en cours d'exécution deux fois avec la configuration:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
Si vous vérifiez les journaux avec une telle configuration, vous obtiendrez quelque chose comme:
[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] ------------------------------------------------------------------------
ce qui signifie que le plugin a en fait été exécuté deux fois. Ce qui se passe, c’est que le plugin Jar, dans un projet dont le package est jar
a une exécution par défaut liée à la phase package
. Cette exécution par défaut est celle mentionnée dans les journaux avec l'ID default-jar
.
Lorsque vous avez configuré un <execution>
dans le plug-in, vous avez en fait configuré une nouvelle exécution dans laquelle l'objectif jar
du plug-in doit être appelé. Etant donné que l’objectif jar
EST LI&EACUTE; PAR D&EACUTE;FAUT &AGRAVE; LA PHASE package
, cette exécution est exécutée à cette phase, après la liaison par défaut inhérente à l’emballage jar
. Et comme le plugin a déjà fonctionné, il échoue car le relancer remplacerait en réalité le principal artefact déjà produit lors de la première exécution. Cette erreur a été ajoutée à la version 3.0.0 du plug-in dans MJAR-198 , car un tel événement est très probablement une mauvaise configuration qui doit être détectée à un stade précoce.
En tant que tel, le correctif est simple: n’avez pas d’exécution qui spécifie l’objectif jar
et laissez celle par défaut (provenant du package jar
) effectuer le travail. Le fichier JAR sera toujours créé, même sans configuration explicite de l’objectif jar
, grâce à l’exécution par défaut. Si vous voulez aussi un JAR test, vous aurez toujours besoin de configurer le plugin pour le faire avec:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
Mais notez que l'objectif jar
n'est pas spécifié.
Dans mon cas, j'ai configuré l'ID de l'exécution comme default-jar, puis l'erreur a disparu. par exemple.
<execution>
<id>default-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
Ajouter une seule classe inutile dans src/main/Java semble résoudre le problème, voir: