Kompilierung überspringen oder Ausführung überspringen?
Bozho
Ich muss einen Steg ausführen, ohne die Testklassen zu kompilieren.
Antworten:
133
Laut der Dokumentation zum Maven Surefire Plugin -Dmaven.test.skipsollte sowohl die Kompilierung als auch die Ausführung der Tests übersprungen werden. Im Gegensatz dazu wird -DskipTestsnur die Testausführung übersprungen : Die Tests werden noch kompiliert.
+1 Ich hasse die Benennung jedoch. Es ist völlig nicht-mir klar , warum skipTestsgerade überspringt die Ausführung der Tests und maven.text.skipüberspringt die Erstellung und Ausführung der Tests. Ich muss immer nachsehen, welches welches ist.
Joachim Sauer
17
Nur um explizit klar zu sein:
skipTestskompiliert alles in der <testSourceDirectory>, führt sie aber nicht aus .
maven.test.skipwird nicht kompiliert alle Tests, aber wird ausgeführt , alle kompilierten Tests , die ihren Weg in das gemacht <testOutputDirectory>.
Das Verhalten der obigen 2 ist also umgekehrt. Ich wollte nur darauf hinweisen, dass maven.test.skipdas Kompilieren UND Ausführen nicht übersprungen wird, wenn Testdateien entpackt / kopiert / etc. in <testOutputDirectory>.
Abhängig davon, welche Version von Maven Sie verwenden, gibt es auch eine, maven.test.skip.exec=truedie zusätzlich die Testausführung überspringt, ähnlich wie bei skipTests.
Das stimmt leider nicht, zumindest in Maven 3.0.5 und Maven-Compiler-Plugin 3.5.1. Sie können es in jedem Projekt testen mvn clean package -DskipTests=true && mvn test -Dmaven.test.skip=true, das Tests enthält: Kompiliert die Tests (aufgrund der ersten Paketausführung), führt sie jedoch nicht im zweiten Befehl aus. Angenommen, Standardverzeichnisse target/test-classesenthalten danach alle Tests, wurden jedoch nicht ausgeführt.
David Georg Reichelt
Dies ist die richtige Antwort und sollte als solche akzeptiert werden
Artem
8
Führen Sie beispielsweise eine Phase aus , die nicht enthalten test-compileist compile.
Ich habe in einer anderen Frage eine Problemumgehung gefunden, die eine Plugin-Ausführung überschreibt, indem standardmäßig das folgende Snippet in Ihre pom.xml eingefügt wird:
Dies scheint zu funktionieren, deaktiviert aber definitiv nicht die Phase, sondern die Standardaktionen, die ein Plugin in einer bestimmten Phase definiert.
Antworten:
Laut der Dokumentation zum Maven Surefire Plugin
-Dmaven.test.skip
sollte sowohl die Kompilierung als auch die Ausführung der Tests übersprungen werden. Im Gegensatz dazu wird-DskipTests
nur die Testausführung übersprungen : Die Tests werden noch kompiliert.quelle
skipTests
gerade überspringt die Ausführung der Tests undmaven.text.skip
überspringt die Erstellung und Ausführung der Tests. Ich muss immer nachsehen, welches welches ist.Nur um explizit klar zu sein:
skipTests
kompiliert alles in der<testSourceDirectory>
, führt sie aber nicht aus .maven.test.skip
wird nicht kompiliert alle Tests, aber wird ausgeführt , alle kompilierten Tests , die ihren Weg in das gemacht<testOutputDirectory>
.Das Verhalten der obigen 2 ist also umgekehrt. Ich wollte nur darauf hinweisen, dass
maven.test.skip
das Kompilieren UND Ausführen nicht übersprungen wird, wenn Testdateien entpackt / kopiert / etc. in<testOutputDirectory>
.Abhängig davon, welche Version von Maven Sie verwenden, gibt es auch eine,
maven.test.skip.exec=true
die zusätzlich die Testausführung überspringt, ähnlich wie bei skipTests.quelle
mvn clean package -DskipTests=true && mvn test -Dmaven.test.skip=true
, das Tests enthält: Kompiliert die Tests (aufgrund der ersten Paketausführung), führt sie jedoch nicht im zweiten Befehl aus. Angenommen, Standardverzeichnissetarget/test-classes
enthalten danach alle Tests, wurden jedoch nicht ausgeführt.Führen Sie beispielsweise eine Phase aus , die nicht enthalten
test-compile
istcompile
.quelle
Ich bin kein Experte bei Maven, aber was ich in meinem aktuellen Projekt verwende, ist:
Abhängig von Ihrem Anwendungsfall verwenden Sie:
könnte auch für Sie arbeiten.
quelle
Ich habe in einer anderen Frage eine Problemumgehung gefunden, die eine Plugin-Ausführung überschreibt, indem standardmäßig das folgende Snippet in Ihre pom.xml eingefügt wird:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <executions> <execution> <id>default-testCompile</id> <phase>none</phase> </execution> </executions> </plugin> </plugins> </build>
Dies scheint zu funktionieren, deaktiviert aber definitiv nicht die Phase, sondern die Standardaktionen, die ein Plugin in einer bestimmten Phase definiert.
quelle