Ich benutze Maven 2.2.1 und um mein Projekt zu erstellen, habe ich diesen Befehl verwendet
mvn clean install -Dmaven.test.skip=true
Der Build schlug jedoch fehl und sagte, dass eines der Artefakte nicht gefunden werden konnte. Als ich jedoch benutzte:
mvn clean install -DskipTests
alles hat gut funktioniert.
Bisher habe ich gedacht, dass diese beiden Befehle gleichwertig sind. Dieser Link scheint jedoch darauf -Dmaven.test.skip=true
hinzudeuten, dass auch das Kompilieren der Testfälle übersprungen wird.
Das hat mir jedoch immer noch nicht erklärt, warum ein Befehl funktioniert und ein anderer nicht. Wird dankbar sein, wenn jemand mir dies bitte erklärt.
-Dmaven.test.skip=true -DskipTests
? Das eine oder andere kann manchmal weggelassen werden, abhängig von den Umständen, aber wer möchte darüber nachdenken ..Antworten:
Wie Sie bereits bemerkt haben, wird das
-Dmaven.test.skip=true
Kompilieren der Tests übersprungen. Genauer gesagt wird das Erstellen der Testartefakte übersprungen. Bei großen Projekten ist es üblich, Testdienstprogramme und Basisklassen für Module im selben Projekt gemeinsam zu nutzen.Dies wird erreicht, indem für ein Modul
test-jar
ein zuvor erstelltes Modul erforderlich ist :Wenn
-Dmaven.test.skip=true
(oder einfach-Dmaven.test.skip
) angegeben wird, werden dietest-jar
s nicht erstellt, und jedes Modul, das sich auf sie stützt, schlägt fehl.Im Gegensatz dazu , wenn Sie verwenden
-DskipTests
, wird Maven nicht laufen die Tests, aber es ihnen nicht kompiliert und den Test-jar zu bauen, ist es für die nachfolgenden Module machen.quelle
Ich hatte einige Abhängigkeiten mit den Tests, um das Paket zu erstellen.
Mit dem folgenden Befehl kann die Notwendigkeit des Testartefakts außer Kraft gesetzt werden, um das Ziel zu erreichen:
quelle
Es gibt einen Unterschied zwischen den einzelnen Parametern.
Die Phase -DskipTests überspringt die Ausführung der Testphase. Am Ende dieses Prozesses werden Ihre Tests kompiliert.
Die Phase -Dmaven.test.skip = true überspringt das Kompilieren und Ausführen von Tests.
Da der Parameter -Dmaven.test.skip = true beim Kompilieren überspringt, verfügen Sie nicht über das Testartefakt.
Weitere Informationen finden Sie in der Surfire-Dokumentation: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html
quelle
Ich kann Ihnen ein Beispiel geben, das zum gleichen Problem führt, aber möglicherweise keine Antwort auf Ihre Frage. (Außerdem verwende ich in diesem Beispiel mein Maven 3-Wissen, das möglicherweise nicht für Maven 2 gilt.)
In einem Multi-Modul - Maven - Projekt (enthält Module
A
undB
, woB
abhängig vonA
), können Sie auch eine hinzufügen Test Abhängigkeit aufA
ausB
.Diese Abhängigkeit kann wie folgt aussehen:
(Weitere Informationen finden Sie unter https://maven.apache.org/guides/mini/guide-attached-tests.html. )
Beachten Sie, dass das Projekt ein
A
sekundäres Artefakt mit einem Klassifizierer erzeugt,tests
in dem sich die Testklassen und Testressourcen befinden.Wenn Sie Ihr Projekt mit erstellen
-Dmaven.test.skip=true
, wird ein Fehler bei der Abhängigkeitsauflösung angezeigt, solange das Testartefakt nicht in Ihrem lokalen Repo oder in externen Repositorys gefunden wurde. Der Grund ist, dass die Testklassen weder zusammengestellt noch dastests
Artefakt hergestellt wurden.Wenn Sie Ihren Build jedoch mit
-DskipTests
Ihremtests
Artefakt ausführen, wird er erstellt (obwohl die Tests nicht ausgeführt werden) und die Abhängigkeit wird aufgelöst.quelle
Um den Testfall während der Installation von maven clean zu überspringen, habe ich im folgenden Befehl den Parameter -DskipTests verwendet
in Terminalfenster
quelle
Der Parameter -DskipTests funktioniert möglicherweise nicht, abhängig von Ihrer todsicheren Plugin-Version.
Quelle: Surefire-Parameterdetails
quelle
Während der Maven-Kompilierung können Sie die Testausführung überspringen, indem Sie das folgende Plugin in pom.xml hinzufügen
quelle
mvn test