Pakiet Maven / instalacja bez testu (pomiń testy)


343

Próbuję spakować mój projekt. Ale automatycznie uruchamia testy poprzedzające wykonanie pakowania. Testy wstawiają część zawartości do bazy danych. Nie tego chcę, muszę unikać uruchamiania testów podczas pakowania aplikacji. Czy ktoś wie, jak uruchomić pakiet bez testu?


13
Test jednostkowy powinien składać się z 4 następujących etapów: inicjalizacja, test, weryfikacja i porzucenie. Być może powinieneś dostosować swoje testy i dodać odpowiednie porzucenie / czyszczenie bazy danych lub użyć osobnej instancji bazy danych, nie spakowanej z plikiem jar, do uruchomienia testów.
Marc-Christian Schulze,

Wygląda na to, że twoje testy są „ciężkie”, więc nie chcesz ich wykonywać. Ale to zła praktyka. Może niektóre frameworki jako DBUnit mogą ci pomóc? Czy możesz cofnąć zmiany w bazie danych pod koniec testu?
Mickael Marrache

Odpowiedzi:


575

Uruchom maven z

mvn package -Dmaven.test.skip=true 

1
dzięki za twoją natychmiastową odpowiedź, uruchamiam się z Eclipse, gdzie dodałem polecenie -Dmaven.test.skip = true?
vks

10
Nigdy nie uruchomiłem mvn z zaćmienia, ale w oknie Uruchom konfigurację, w którym konfigurujesz cele i profile mavena, jest pole wyboru „Pomiń test”. Może to załatwi sprawę.
Giorgos Dimtsas,

9
zgodnie z dokumentacją , która pominie kompilację oraz wykonanie. Możesz użyć opcji -DskipTests, aby po prostu pominąć wykonanie. Ten post zawiera również ostrzeżenia o tym, z którymi wersjami możesz używać każdej flagi
JonnyRaa

1
Wielkie dzięki, kiedyś to robiłem używając, -DskipTestsale to już nie działa, jakiś pomysł dlaczego?
sam

7
Uwaga: dokumentacja wtyczki Maven Surefire i wtyczki Maven Failsafe sugeruje, że ustawienie skipTestsjest lepsze niż ustawienie maven.test.skip.
Filip Bártek

172

Wystarczy podać polecenie wymienione poniżej, które zignoruje wykonanie przypadków testowych,

mvn package -DskipTests

4
dla mnie to by nie działało. Zamiast tego musiałem użyć zaakceptowanego rozwiązania
Sebas

1
-DskipTestsnie działało dla mnie, gdy używałemmvn clean install -DskipTests
Vishrant

1
Jest częściowo w porządku, ponieważ nie wykona testu, ALE spowoduje uruchomienie klas testowych .....
Antoniossss,

Dla obserwujących -DskipTestsjest taki sam, jak -Dmaven.test.skip.exec=true stackoverflow.com/a/21933970/32453 i tak, kompiluje testy i nie uruchamia ich (podczas gdy -Dmaven.test.skip=trueich nie kompiluje)
rogerdpack

47

możesz dodać tę konfigurację wtyczek do pom, jeśli nie chcesz ustawiać arg wiersza poleceń:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <skipTests>true</skipTests>
  </configuration>
</plugin>

3
Przy tej konfiguracji nie można już uruchamiać testów z wiersza polecenia.
Emmanuel Bourg

1
@EmmanuelBourg Można temu zaradzić, postępując zgodnie ze wskazówkami w tym przykładzie maven.apache.org/plugins/maven-surefire-plugin/examples/…
smp7d 18'12


41

Zauważ, że -Dmaven.test.skip uniemożliwia Mavenowi zbudowanie artefaktu słoika testowego.

Jeśli chcesz pominąć testy, ale utworzyć artefakty zgodnie z normalną wersją kompilacji:

-Dmaven.test.skip.exec

1
To była odpowiedź, której szukałem, działa dobrze. Dzięki.
Binita Bharati,

Jak do diabła mam to pamiętać? Dlaczego nie stworzyć prostego oczywistego i zapadającego w pamięć aliasu, takiego jak „skipTests”?
TheRealChx101

32

Jeśli próbujesz tego w programie Windows Powershell, pojawi się ten błąd:

[ERROR] Unknown lifecycle phase ".test.skip=true". You must specify a valid lifecycle phase or a goal in the format...

Powodem tego jest to, że w PowerShell „ -” ma specjalne znaczenie i powoduje problemy z maven.

Rozwiązaniem jest dodanie go do tyłu (`), tak jak to ...

mvn `-Dmaven.test.skip=true install 

Odniesienie: http://kuniganotas.wordpress.com/2011/08/12/invalid-task-test-skiptrue-you-must-specify-a-valid-lifecycle-phase/


1
Miałem ten sam problem i to dla mnie rozwiązało. Dzięki.
nsof

26
<properties>
    <maven.test.skip>true</maven.test.skip>
</properties>

to także sposób na dodanie pliku pom


18

Możesz przekazać maven.test.skipflagę jako argument JVM, aby pominąć uruchomione testy, gdy uruchomiona jest faza pakietu (i poprzednie w domyślnym cyklu życia):

mvn package -Dmaven.test.skip=true

Możesz także przekazać skipTestssamą flagę do pliku wykonywalnego mvn. Jeżeli chcesz dołączyć tę informację w swojej POM, można utworzyć nowy profil, w którym można skonfigurować maven-surefire-plugin, aby przejść testy .




11

Odpowiadając na stare i zaakceptowane pytanie tutaj. Możesz dodać to do pliku pom.xml, jeśli chcesz uniknąć ciągłego przekazywania argumentów wiersza poleceń:

  <properties>
    <skipTests>true</skipTests>
  </properties>

11

Możesz dodać jedno -DskipTestslub -Dmaven.test.skip=truedowolne mvnpolecenie do pominięcia testów. W twoim przypadku byłoby tak jak poniżej:

mvn package -DskipTests

LUB

mvn package -Dmaven.test.skip=true


4

Testy powinny zawsze [1] uruchamiać się przed pakietem. Jeśli musisz wyłączyć testy, robisz coś złego. Innymi słowy, próbujesz rozwiązać zły problem. Dowiedz się, na czym polega Twój problem, i zadaj to pytanie. Wygląda na to, że jest to związane z bazą danych.

[1] Możesz pominąć testy, jeśli chcesz szybko wygenerować artefakt do użytku lokalnego, na potrzeby programowania, ale ogólnie rzecz biorąc, tworzenie artefaktu powinno zawsze przebiegać pomyślnie.


Mam podobny problem: moje aplikacje zawierają websocket. Kiedy uruchamiam mvn clean install, kończę w niekończącej się serii testów. Zanim wymusiłem zamknięcie, proces trwał 3 godziny, a drukowane wiadomości dotyczyły tylko Websocket. Czy możesz sprawdzić mój problem, aby zobaczyć, co robię źle? stackoverflow.com/questions/54614739/…
georgeB

Reguły zawsze mają wyjątki. Jeśli tak nie uważasz, jesteś w błędzie.
Jay Sullivan


2

W przypadku pakietu maven bez testu infekcji maven:

<properties>
    <maven.test.failure.ignore>true</maven.test.failure.ignore>
</properties>

Dzięki, potrzebowałem właśnie tego dzisiaj.
Sean McMillan,

1

Robisz to oczywiście w niewłaściwy sposób. Testowanie jest ważną częścią wstępnego pakowania. Nie należy go ignorować ani pomijać, ale należy zrobić to we właściwy sposób. Spróbuj zmienić bazę danych, do której wstawia dane (np. Test_db). Konfiguracja może zająć trochę czasu. Aby mieć pewność, że ta baza danych będzie używana wiecznie, należy usunąć wszystkie dane przed końcem testów. JUnit4 ma adnotacje, które Ci to ułatwiają. Użyj adnotacji @Before, @After @Test dla właściwych metod. Musisz poświęcić na to trochę czasu, ale będzie warto!


9
Myślę, że pytanie, a także chęć spakowania bez uruchamiania testów jest całkowicie poprawna. Nie sądzę, że OP „oczywiście robi to źle”. Różni ludzie i projekty mają różne potrzeby, które zazwyczaj nie są zgodne z Biblią Mavena lub przekonaniami różnych osób (takich jak ty) na temat tego, jak powinno działać oprogramowanie. Myślę, że twoja odpowiedź byłaby bardziej doceniona bez jej protekcjonalnego podejścia.
Zero3

1

W Intellij przejdź do Widok -> Narzędzia Windows -> wybierz Projekty Maven. W menu rozwijanym Lifecyle kliknij prawym przyciskiem myszy pakiet -> wybierz opcję Utwórz „swój projekt [pakiet]” ...

Wprowadź tę wartość: package -Dmaven.test.skip=true -f pom.xmlw polu Wiersz polecenia. Kliknij Zastosuj, a wraz z utworzonym niestandardowym poleceniem maven powinno pojawić się menu rozwijane Uruchom konfiguracje.


dlaczego zostało to zanegowane? Używam tego za każdym razem, gdy chciałem zbudować swój projekt, ale pomijam testy
Patrick Tolentino,

0

mvn clean install -Dmaven.test.skip=true

pracował dla mnie, ponieważ -Dskipjuż nie działał.



-1

Najlepszy i najłatwiejszy sposób na zrobienie tego, w IntelliJ Idea w oknie „Maven Project” i po prostu nie klikaj przycisku testowego. Mam nadzieję że ci pomogłam. Miłego dnia :)


1
Jeśli klikniesz pakiet, uruchomione zostaną testy, których OP próbuje uniknąć
Charlie
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.