2010-07-29 5 views
75

Rzeczywistość, gdy uruchamiam testy, które zawiodły, ale muszę je uruchomić, aby uzyskać niektóre pliki .class, które są bardzo ważne dla mojego słoika.Jak zbudować słoik za pomocą maven, ignorując wyniki testu?

Domyślnie, gdy wyniki testu się nie powiedzie, jar nie jest zbudowany, czy mógłbym dodać ustawienie w pom.xml, które to zignoruje, więc mogę zbudować jar ignorując wyniki z testów?

Czytałem coś o "Maven Surefire Plugin", ale nie wiem, jak go używać ...

Odpowiedz

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

http://jira.codehaus.org/browse/SUREFIRE-319

Albo z wiersza poleceń

http://maven.apache.org/maven-1.x/plugins/test/properties.html

maven.test.error.ignore Tak Ustaw to prawda zignorować błędy podczas testowania . Jego stosowanie nie jest zalecane, ale dość wygodne przy okazji

+0

Bardzo dziękuję za twój wpis, dodałem tę część i zadziałało, w każdym razie mój problem nie został rozwiązany, ponieważ brakuje plików .class, które wynikają po uruchomieniu testów ... i potrzebuję tych ... w jakiś sposób ... nawet jeśli wyniki testu się nie powiedzie – user398920

+0

Przepraszam, że się mylę, usunięcie " true" część i otrzymuję właściwe wyniki – user398920

+1

dla mnie wydaje się, że -Dmaven.test .failure.ignore = true działa z wiersza poleceń, ale -Dmaven.test.error.ignore = true nic nie robi. – rogerdpack

31

mvn -Dmaven.test.skip=true package pomija fazie testów

ignorować awarie oraz na bieżąco Maven od zatrzymania można dodać do sekcji pom.xml:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
    <testFailureIgnore>true</testFailureIgnore> 
    </configuration> 
</plugin> 
+0

Bardzo dziękuję za twój wpis, dodałem tę część i zadziałało, w każdym razie mój problem nie został rozwiązany, ponieważ brakuje plików .class, które wynikają po uruchomieniu testów ... i potrzebuję tych ... jakoś ... nawet jeśli wyniki testu się nie powiedzie – user398920

+0

Dodałem nową część do odpowiedzi dotyczącej konfiguracji wtyczki surefire do ignorowania niepowodzeń testowych ... mam nadzieję, że pomaga .. – fasseg

+3

'mvn -Dmaven.test.skip = true pakiet pomija fazę testowania' . ** Nie, nie! **. Nie można pominąć fazy za pomocą właściwości systemowej. To, co robi, ustawia flagę, która pomija wykonanie surefire: test mojo i kompilator: test-compile mojo (możliwe inne): http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo .html # skip http://maven.apache.org/plugins/maven-compiler-plugin/testCompile-mojo.html#skip –

-1

Użyj opcji maven -Dmaven.test.skip = true

Np pakiet mvn -Dmaven.test.skip = true

+0

Dziękuję bardzo za twój post, dodałem tę część i zadziałało, w jakiś sposób mój problem nie został rozwiązany, ponieważ brakuje plików .class, które wynikają po uruchomieniu testów ... i potrzebuję ich ... jakoś. .. nawet jeśli wyniki testu się nie powiedzie – user398920

+5

Pominie to testy, pytanie dotyczy raczej zignorowania błędów. –

+0

Dzięki za pomoc! – user398920

20

Rozwiązaniem jest:

mvn -fn clean install 

wykonać mvn --help do opcji zaawansowanych

Oto fragment dla -fn

-fn,--fail-never   NEVER fail the build, regardless 
          of project result 
+1

to nie jest najlepsze rozwiązanie, ponieważ przestanie budować projekt, który się nie powiódł, co oznacza, że ​​jakiekolwiek cele, które zostały ustawione po wykonaniu testu (pakiet, instalacja, wdrożenie itd.) Nie zostaną wykonane dla tego projektu. Tak więc "pełna kompilacja" będzie działać do końca, ale ten projekt nie zostanie zainstalowany na repo i poprzednia wersja słoika będzie używana tam, gdzie jest określona jako zależność. – Zilvinas

+0

@Zilvinas, więc co * jest * najlepszym rozwiązaniem? –

+0

zobacz odpowiedź poniżej: http://stackoverflow.com/a/16690564/344477 – Zilvinas

3

użyciu - DskipTests = true zamiast -Dmaven.test.skip = true, aby pominąć testy, ale je skompilować.

Użycie opcji -Dmaven.test.failure.ignore = true również będzie działać, ale nie jest zbyt ładne.

+0

Jeśli typ 'test-jar' wygenerowany z klasy testowej zostanie użyty jako zależność w innym module, kompilacja zakończy się niepowodzeniem, jeśli użyjemy' -Dmaven. test.skip = true ". Podczas gdy -DskipTests = true kompiluje i generuje słoik, ale nie uruchamia testu. :) – Shiva

122

Proszę odnieść się do surefire:test o szczegóły, ale najbardziej użyteczne właściwości są:

-Dmaven.test.failure.ignore = true (lub -DtestFailureIgnore = true) - ignoruje wszelkie błędy wystąpiły podczas Test wykonanie

-Dmaven.test.error.ignore = prawda (wycofane) - zignoruje wystąpiły błędy podczas wykonywania testu

-DskipTests - skompilowałaby klasy testowe, ale całkowicie pominięto wykonanie testu

-Dmaven.test.pomiń = true - nawet nie skompilować testy

wierzę, że w przypadku, gdy chcesz skompilować klas testowych ale nie uda się zbudować z powodu jakichkolwiek testów błędów i nadal tworzyć słoik.

Powinieneś użyć pierwszej opcji, aby zignorować wszelkie błędy testowe, które wciąż możesz przejrzeć po zakończeniu kompilacji.

+0

Ktoś wie, dlaczego "-Dmaven.test.error.ignore = true" nie jest już używany? Zauważyłem, że nie należy ignorować faktycznych błędów, ale ignorować błędy (które mogą nie spowodować, że test "zawiedzie") w niektórych przypadkach. Czy jest jakiś sposób na rozróżnienie tych dwóch? – PAULUS

+0

Możesz użyć starszej wersji wtyczki surefire, aby to osiągnąć. – Zilvinas

+0

Kompilacja kończy się niepowodzeniem, gdy używam -DtestFailureIgnore = true, podczas gdy -DtestFailureIgnore = true działa. Używam maven-3.2.1 – divideByZero