Mam problemy z używaniem zależności test-jar
w projekcie wielomodułowym. Na przykład, kiedy deklaruje, że moduł cleartk-syntax
zależy moduł cleartk-token
na test-jar
tak (pełny kod jest here):Dlaczego wymagana jest zależność "test-jar" dla "mvn compile"
<modelVersion>4.0.0</modelVersion>
<groupId>org.cleartk</groupId>
<artifactId>cleartk-syntax</artifactId>
<version>0.5.0-SNAPSHOT</version>
<name>cleartk-syntax</name>
...
<dependencies>
...
<dependency>
<groupId>org.cleartk</groupId>
<artifactId>cleartk-token</artifactId>
<version>0.7.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
pojawia się następujący błąd, jeśli biegnę mvn compile
użyciu Maven 2:
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
Missing:
----------
1) org.cleartk:cleartk-token:test-jar:tests:0.7.0-SNAPSHOT
Jeśli używam maven 3 pojawia się błąd:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.654s
[INFO] Finished at: Mon Jan 24 21:19:17 CET 2011
[INFO] Final Memory: 16M/81M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project cleartk-syntax: Could not resolve
dependencies for project org.cleartk:cleartk-syntax:jar:0.5.0-SNAPSHOT: Could
not find artifact org.cleartk:cleartk-token:jar:tests:0.7.0-SNAPSHOT
w tym ostatnim przypadku, jestem par szczególnie zdezorientowany, ponieważ pomyślałbym, że powinien szukać artefaktu typu test-jar
nie typu jar
.
Z maven 2 lub maven 3, mogę go skompilować, uruchamiając mvn compile package -DskipTests
. Z maven 3, mogę również go skompilować, uruchamiając mvn compile test-compile
.
Ale dlaczego maven 2 lub maven 3 szuka zależności test-jar
podczas fazy compile
? Czy nie powinno się czekać aż faza test-compile
będzie szukać takich zależności?
Aktualizacja: Odpowiedź brzmiała, że wtyczka maven-exec, używana podczas mojej fazy kompilacji, requires dependency resolution of artifacts in scope:test. Stworzyłem a feature request to remove the scope:test dependency.
Potwierdziłem, że pierwszą fazę maven do pracy jest test-kompilacja. process-test-resources nie działa. –
Miło słyszeć, że nie jestem sam, wpadając na ten błąd. W twoim przypadku używasz również wtyczki 'exec: java' - która wydawała mi się częścią problemu. Jeśli nie, czy wiążesz inne wtyczki do faz wykonania? – Steve
Co niedawno odkryłem, ale jeszcze nie rozwinęłam, to mogę spowodować problem dzięki bardzo zredukowanemu zestawowi 3 plików pom. Jeśli te trzy (mój projekt) dziedziczą z niczego, to działa. Jeśli odziedziczą po org.apache: apache, to się zepsuje. Tak więc jedna z wtyczek zdefiniowanych tam prawdopodobnie ją zrywa. Nie ma tam exec: plug-in java - ale jedna z tych wtyczek i exec prawdopodobnie zależy od czegoś innego zepsutego. Skomentuję tutaj, jeśli mogę go zawęzić. –