Korzystam z Maven 2.2.1 i do zbudowania projektu użyłem tego polecenia
mvn clean install -Dmaven.test.skip=true
Jednak kompilacja nie powiodła się, mówiąc, że nie można znaleźć jednego artefaktu. Jednak kiedy użyłem:
mvn clean install -DskipTests
wszystko działało dobrze.
Do tej pory myślałem, że te 2 polecenia są równoważne. Jednak ten link wydaje się sugerować, że -Dmaven.test.skip=true
również pomija kompilację przypadków testowych.
Jednak nadal nie wyjaśniło mi to, dlaczego jedno polecenie działa, a inne nie. Będę wdzięczny, jeśli ktoś mi to wyjaśni.
-Dmaven.test.skip=true -DskipTests
? Jednego lub drugiego można czasem pominąć, w zależności od okoliczności, ale kto chce o tym pomyśleć ...Odpowiedzi:
Jak zauważyłeś,
-Dmaven.test.skip=true
pomija kompilację testów. Co więcej, pomija budowanie artefaktów testowych. Powszechną praktyką w przypadku dużych projektów jest udostępnianie narzędzi testujących i klas podstawowych między modułami w tym samym projekcie.Osiąga się to poprzez moduł wymagający
test-jar
wcześniej zbudowanego modułu:Jeśli
-Dmaven.test.skip=true
(lub po prostu-Dmaven.test.skip
) jest określony,test-jar
s nie są budowane, a każdy moduł, który się na nich opiera, zawiedzie.W przeciwieństwie do tego, gdy używasz
-DskipTests
, Maven nie uruchamia testów, ale je kompiluje i buduje słoik testowy, udostępniając go dla kolejnych modułów.źródło
Miałem pewną współzależność z testami w celu zbudowania pakietu.
Następujące polecenie zastępuje potrzebę artefaktu testowego w celu osiągnięcia celu:
źródło
Istnieje różnica między każdym parametrem.
-DskipTests pomija fazę testów, co oznacza, że pod koniec tego procesu będziesz mieć skompilowane testy.
-Dmaven.test.skip = true pomiń kompilację i uruchomienie testów.
Jako parametr -Dmaven.test.skip = true pomiń kompilację, nie masz artefaktu z testów.
Aby uzyskać więcej informacji, przeczytaj dokumentację surfire: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html
źródło
Mogę podać przykład, który powoduje ten sam problem, ale może nie dać odpowiedzi na twoje pytanie. (Dodatkowo w tym przykładzie używam mojej wiedzy o Maven 3, która może nie dotyczyć Maven 2).
W wielomodułowego Maven projektu (zawiera moduły
A
iB
, gdzieB
zależyA
), można dodać również zależność testowy naA
odB
.Ta zależność może wyglądać następująco:
(więcej informacji można znaleźć na stronie https://maven.apache.org/guides/mini/guide-attached-tests.html )
Należy zauważyć, że projekt
A
tworzy artefakt wtórny z klasyfikatorem, wtests
którym znajdują się klasy testowe i zasoby testowe.Jeśli zbudujesz projekt
-Dmaven.test.skip=true
, otrzymasz błąd rozwiązywania zależności, dopóki artefakt testowy nie zostanie znaleziony w lokalnym repozytorium lub repozytoriach zewnętrznych. Powodem jest to, że klasy testów nie zostały ani skompilowane, anitests
artefakt nie został wyprodukowany.Jednakże, jeśli uruchomić build z
-DskipTests
Twojegotests
artefaktu będzie produkowany (choć badania nie będzie działać) i zależność zostanie rozwiązany.źródło
Aby pominąć przypadek testowy podczas instalacji maven clean, użyłem parametru -DskipTests w następującej komendzie
do okna terminala
źródło
Parametr -DskipTests może nie działać w zależności od wersji wtyczki surefire.
Źródło: Szczegóły parametru Surefire
źródło
Podczas kompilacji maven możesz pominąć wykonanie testu, dodając następującą wtyczkę w pom.xml
źródło
mvn test