Testy pomijania Maven

225

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=trueró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.

Prabhjot
źródło
1
Jakiej wersji wtyczki maven-surefire używasz? Czy to ta sama wersja, którą czytasz?
gerrytan
2
Jeden pomija budynek, drugi pomija bieganie. Jeśli chcesz, użyj obu.
Elliott Frisch
1
Czy możesz podać szczegóły niepowodzenia - komunikat o błędzie lub śledzenie stosu?
Raghuram
1
Dlaczego używasz takiej starszej wersji Maven, który jest już zdefiniowany EOL .
khmarbaise
1
Czy to prawda, że ​​aby całkowicie pominąć wszystkie testy związane z testami, których muszę użyć -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ć ...
Landon Kuhn

Odpowiedzi:

120

Jak zauważyłeś, -Dmaven.test.skip=truepomija 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-jarwcześniej zbudowanego modułu:

<dependency>
  <groupId>org.myproject.mygroup</groupId>
  <artifactId>common</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

Jeśli -Dmaven.test.skip=true(lub po prostu -Dmaven.test.skip) jest określony, test-jars 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.

Mureinik
źródło
2
Jak rozwiązać ten problem? Jako moje polecenie online maven użyj -Dmaven.test.skip.
neptun
2
@neptune jaki problem? Jeśli masz nowe pytanie, użyj nowego postu, aby je zadać.
Mureinik,
58

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:

mvn -DskipTests=true  package
gilwo
źródło
29

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

Dennys Fredericci
źródło
15

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 Ai B, gdzie Bzależy A), można dodać również zależność testowy na Aod B.

Ta zależność może wyglądać następująco:

<dependency>
     <groupId>com.foo</groupId>
     <artifactId>A</artifactId>
     <type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 2. -->
     <scope>test</scope>
</dependency>

(więcej informacji można znaleźć na stronie https://maven.apache.org/guides/mini/guide-attached-tests.html )
Należy zauważyć, że projekt Atworzy artefakt wtórny z klasyfikatorem, w testsktó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, ani testsartefakt nie został wyprodukowany.
Jednakże, jeśli uruchomić build z -DskipTestsTwojego testsartefaktu będzie produkowany (choć badania nie będzie działać) i zależność zostanie rozwiązany.

Stepan Vavra
źródło
10

Aby pominąć przypadek testowy podczas instalacji maven clean, użyłem parametru -DskipTests w następującej komendzie

mvn clean install -DskipTests

do okna terminala

Niraj Trivedi
źródło
9

Parametr -DskipTests może nie działać w zależności od wersji wtyczki surefire.

Możesz użyć „-Dmaven.test.skip.exec” zamiast „-DskipTests”

Źródło: Szczegóły parametru Surefire

vtsami
źródło
1

Podczas kompilacji maven możesz pominąć wykonanie testu, dodając następującą wtyczkę w pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
         <skipTests>true</skipTests>
    </configuration>
</plugin>
Radadiya Nikunj
źródło
1
Pomija testy nawet wtedy, gdy to robiszmvn test
Pratik Singhal