440 Stimmen

Maven Tests überspringen

Ich verwende Maven 2.2.1 und um mein Projekt zu erstellen, habe ich diesen Befehl verwendet

mvn clean install -Dmaven.test.skip=true

Dennoch schlug der Build fehl, da er eines der Artefakte nicht finden konnte. Als ich jedoch folgendes verwendete:

mvn clean install -DskipTests

hat alles einwandfrei funktioniert.

Bisher dachte ich, dass diese 2 Befehle äquivalent sind. Allerdings scheint dieser Link zu suggerieren, dass -Dmaven.test.skip=true auch das Kompilieren der Tests überspringt.

Dennoch erklärt mir das nicht, warum ein Befehl funktioniert und ein anderer nicht. Ich wäre dankbar, wenn mir jemand das erklären könnte.

269voto

Mureinik Punkte 282324

Wie Sie bemerkt haben, überspringt -Dmaven.test.skip=true das Kompilieren der Tests. Noch wichtiger ist, dass es das Erstellen der Test-Artefakte überspringt. Eine häufige Praxis bei großen Projekten besteht darin, Testdienstprogramme und Basisklassen zwischen Modulen im selben Projekt gemeinsam zu nutzen.

Dies wird erreicht, indem ein Modul den test-jar eines zuvor erstellten Moduls benötigt:

  org.myproject.mygroup
  common
  1.0
  test-jar
  test

Wenn -Dmaven.test.skip=true (oder einfach -Dmaven.test.skip) angegeben ist, werden die test-jars nicht erstellt, und jedes Modul, das von ihnen abhängt, wird seinen Build nicht bestehen.

Im Gegensatz dazu, wenn Sie -DskipTests verwenden, führt Maven die Tests nicht aus, kompiliert sie jedoch und erstellt den test-jar, der für die nachfolgenden Module verfügbar ist.

129voto

gilwo Punkte 1541

Ich hatte eine gewisse gegenseitige Abhängigkeit mit den Tests, um das Paket zu erstellen.

Der folgende Befehl schafft es, die Notwendigkeit für das Testartefakt zu überschreiben, um das Ziel zu erreichen:

mvn -DskipTests=true  package

Und Sie können auch den folgenden Befehl verwenden :-

mvn clean install -Dmaven.test.skip=true

104voto

Dennys Fredericci Punkte 1167

Es gibt einen Unterschied zwischen jedem Parameter.

  • Das -DskipTests überspringt die Phase des Testlaufens, das bedeutet am Ende dieses Prozesses werden Ihre Tests kompiliert sein.

  • Das -Dmaven.test.skip=true überspringt das Kompilieren und Ausführen der Testsphase.

Da der Parameter -Dmaven.test.skip=true das Kompilieren überspringt, haben Sie nicht das Test-Artefakt.

Für weitere Informationen lesen Sie einfach die Surefire-Dokumentation: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html

41voto

Niraj Trivedi Punkte 1756

Um den Testfall während mvn clean install zu überspringen, habe ich den -DskipTests Parameter im folgenden Befehl verwendet

 mvn clean install -DskipTests

im Terminalfenster.

21voto

Stepan Vavra Punkte 3764

Ich kann Ihnen ein Beispiel geben, das zum gleichen Problem führt, aber es gibt Ihnen möglicherweise keine Antwort auf Ihre Frage. (Zusätzlich verwende ich in diesem Beispiel mein Wissen über Maven 3, das möglicherweise nicht für Maven 2 gilt.)

In einem Multi-Modul-Maven-Projekt (enthält Module A und B, wobei B von A abhängt), können Sie auch eine Testabhängigkeit von A in B hinzufügen.

Diese Abhängigkeit in B kann wie folgt aussehen:

     com.foo
     A
     tests
     test-jar 
     test

(Für weitere Informationen siehe https://maven.apache.org/guides/mini/guide-attached-tests.html)

Beachten Sie, dass das Projekt A normalerweise ein sekundäres Artefakt mit einem Klassifizierer tests erzeugt (d.h. .../com/foo/A//A--tests.jar), in dem sich die Testklassen und Testressourcen befinden.

Wenn Sie das Projekt A mit -Dmaven.test.skip=true erstellen, treten beim Erstellen von B ein Fehler bei der Abhängigkeitsauflösung auf, es sei denn, das Testartefakt von A befindet sich in Ihrem lokalen Repository oder in entfernten Repositories. Der Grund dafür ist, dass die Testklassen von A weder kompiliert wurden noch das tests-Artefakt von A erzeugt wurde.

Wenn Sie jedoch A mit -DskipTests erstellen, wird sein tests-Artefakt erzeugt (obwohl die Tests nicht ausgeführt werden) und die Abhängigkeit in B wird erfolgreich aufgelöst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X