web-dev-qa-db-fra.com

Maven JAR Plugin 3.0.2 Erreur: vous devez utiliser un classificateur pour attacher des artefacts supplémentaires au projet au lieu de les remplacer.

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

  • Peu importe qu'il y ait des classes ou des ressources, le message d'erreur ci-dessus apparaît malgré tout. 
  • Le problème apparaît également si deux objectifs sont spécifiés (jar et test-jar). 
  • Le problème n'apparaît PAS si aucun objectif sont spécifiés. Mais ce n’est pas une option, car j’ai vraiment besoin de 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. 

17
Alex Shesterov

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 jara 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é.

30
Tunaki

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>
1
Derik

Ajouter une seule classe inutile dans src/main/Java semble résoudre le problème, voir:

http://maven.40175.n5.nabble.com/quot-mvn-clean-verify-deploy-quot-causes-jar-plugin-to-execute-twice-td5877166.html

0
Wolfgang Fahl