2016-12-04 67 views
9

Wtyczka Maven JAR (wersja 3.0.2) ciągle wyrzuca następujący błąd, nawet dla pojedynczego wywołania jar celem:Maven JAR Plugin 3.0.2 Błąd: Musisz użyć klasyfikatora, aby dołączyć do projektu dodatkowe artefakty, zamiast je zastępować

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:3.0.2:jar (default) on project test: You have to use a classifier to attach supplemental artifacts to the project instead of replacing them. -> [Help 1]

Oto (minimalna?) pom.xml który demonstruje problem:

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

wywołanie jest tylko mvn package.

  • Nie ma znaczenia, czy w ogóle istnieją klasy/zasoby - powyższy komunikat o błędzie pojawia się mimo to.
  • Problem pojawia się również, jeśli określono dwa cele (jar i test-jar).
  • Problem NIE jest wyświetlany, jeśli podano żadnych celów. Ale to nie jest opcja, ponieważ naprawdę potrzebuję zarówno jar i test-jar.

Według documentation, classifier tylko musi być określona w wielu wywołaniach tego samego celu, a istnieje uzasadnione domyślną bramki test-jar których nie mam zamiaru się zmieniać.

Również, problem nie pojawia się na linii 2.x wtyczki JAR.

Czy coś mi umknęło? Czy ktokolwiek mógłby zasugerować, co robię źle?

P.S. Wersja Maven to 3.3.9.

Odpowiedz

18

słoika Plugin jest rzeczywiście coraz wykonywany dwukrotnie konfiguracji:

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

Jeśli sprawdzić logi z takiej konfiguracji, trzeba będzie coś takiego:

[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] ------------------------------------------------------------------------ 

oznacza, że ​​wtyczki został faktycznie wykonany dwa razy. Co się dzieje, jest to Plugin Jar, w projekcie, który ma opakowanie jarhas a default execution bound to the package phase. To domyślne wykonanie jest wymienione w dziennikach o identyfikatorze default-jar.

Po skonfigurowaniu <execution> w wtyczce, faktycznie skonfigurowano nowe wykonanie, w którym ma zostać wywołany cel wtyczki jar. Od jar goal binds by default to the package phase, wykonanie to jest wykonywane w tej fazie, po domyślnym powiązaniu z pakietem jar. A ponieważ wtyczka już działała, nie działa, ponieważ ponowne uruchomienie faktycznie zastąpi główny artefakt już wyprodukowany podczas pierwszego uruchomienia. Ten błąd został dodany w wersji 3.0.0 wtyczki w MJAR-198, ponieważ taka sytuacja ma bardzo duże prawdopodobieństwo błędnej konfiguracji, która powinna zostać wcześnie wykryta.

Jako taka, poprawka jest prosta: nie wykonuj egzekucji, która określa cel jar, i niech domyślna (pochodząca z opakowania jar) wykona pracę. JAR będzie nadal tworzony, nawet bez wyraźnej konfiguracji celu jar, dzięki domyślnemu wykonaniu. Jeśli chcesz JAR testową, jak również, you will still need to configure the plugin to do that z:

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

Należy jednak pamiętać, że celem jar nie jest określona.

+0

Naprawiono problem. Dziękuję za szczegółowe wyjaśnienie. –

+0

Miałem ten sam problem, a błąd nie pomagał mi. Dziękuję Ci! – Stanislav

+0

Dzięki za wyjaśnienie - stawiałem czoła problemowi, mimo że ustawiłem opakowanie na "war" (a nie "jar"), ale usunięcie pakietu wewnątrz wtyczki jar naprawiło problem. – Vering

0

W moim przypadku ustawiłem identyfikator wykonania jako default-jar, a następnie błąd zniknął. na przykład

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

To "działa", ale jest oparte na fakcie, że posiadanie 'default-jar' jako identyfikatora wykonania przesłania domyślne wykonanie z pakietu' jar'. To trochę hack i jest lepsze rozwiązanie. – Tunaki