Maven-Paket / Installation ohne Test (Tests überspringen)

342

Ich versuche mein Projekt zu verpacken. Es werden jedoch automatisch die vorherigen Tests ausgeführt, um die Verpackung durchzuführen. Die Tests fügen einige Inhalte in die Datenbank ein. Dies ist nicht das, was ich möchte. Ich muss vermeiden, Tests auszuführen, während die Anwendung gepackt wird. Weiß jemand, wie man das Paket ohne Test ausführt?

vks
quelle
13
Ein Unit-Test sollte aus den folgenden 4 Phasen bestehen: Initialisierung, Test, Verifikation und Teardown. Vielleicht sollten Sie Ihre Tests anpassen und eine entsprechende Bereinigung / Bereinigung Ihrer Datenbank hinzufügen, oder Sie sollten eine separate Datenbankinstanz verwenden, die nicht in Ihrer JAR-Datei enthalten ist, um Ihre Tests auszuführen.
Marc-Christian Schulze
Es scheint, dass Ihre Tests "schwer" sind, so dass Sie sie nicht ausführen möchten. Aber es ist eine schlechte Praxis. Vielleicht helfen Ihnen einige Frameworks wie DBUnit? Oder können Sie Datenbankänderungen am Ende des Tests zurücksetzen?
Mickael Marrache

Antworten:

572

Maven mit ausführen

mvn package -Dmaven.test.skip=true 
Giorgos Dimtsas
quelle
1
danke für deine sofortige Antwort, laufe von Eclipse, wo ich den Befehl -Dmaven.test.skip = true hinzufüge?
vks
10
Ich habe mvn noch nie über Eclipse gestartet, aber im Fenster "Konfiguration ausführen", in dem Sie die Ziele und Profile von maven konfigurieren, befindet sich das Kontrollkästchen "Test überspringen". Vielleicht reicht das aus.
Giorgos Dimtsas
9
gemäß der Dokumentation , die sowohl die Kompilierung als auch die Ausführung überspringt. Sie können -DskipTests verwenden, um die Ausführung zu überspringen. Dieser Beitrag gibt auch einige Warnungen darüber, mit welchen Versionen Sie jede Flagge verwenden können
JonnyRaa
1
Vielen Dank, ich habe es früher mit gemacht, -DskipTestsaber es funktioniert nicht mehr. Irgendeine Idee warum?
Sam
7
Beachten Sie, dass die Dokumentation zum Maven Surefire Plugin und zum Maven Failsafe Plugin vorschlägt, dass die Einstellung der Einstellung skipTestsvorgezogen wird maven.test.skip.
Filip Bártek
171

Geben Sie einfach den unten genannten Befehl ein, der die Ausführung der Testfälle ignoriert.

mvn package -DskipTests
Jayakumar J.
quelle
4
Für mich würde das nicht funktionieren. Ich musste stattdessen eine akzeptierte Lösung verwenden
Sebas
1
-DskipTestshat bei mir nicht funktioniert, als ichmvn clean install -DskipTests
Vishrant
1
Es ist teilweise in Ordnung, da es keinen Test ausführt, ABER es wird Testklassen komilieren .....
Antoniossss
Für Follower -DskipTestsist es dasselbe wie -Dmaven.test.skip.exec=true stackoverflow.com/a/21933970/32453 und ja, es kompiliert die Tests und führt sie nicht aus (wohingegen -Dmaven.test.skip=truesie nicht kompiliert werden)
rogerdpack
47

Sie können diese Plugin-Konfiguration zu Ihrem POM hinzufügen, wenn Sie das Befehlszeilenargument nicht festlegen möchten:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <skipTests>true</skipTests>
  </configuration>
</plugin>
smp7d
quelle
3
Mit dieser Konfiguration können Sie die Tests nicht mehr über die Befehlszeile ausführen.
Emmanuel Bourg
1
@ EmmanuelBourg Dies kann behoben werden, indem Sie den Anweisungen in diesem Beispiel folgen. Maven.apache.org/plugins/maven-surefire-plugin/examples/…
smp7d
41

Beachten Sie, dass -Dmaven.test.skip verhindert, dass Maven das Testglas-Artefakt erstellt.

Wenn Sie Tests überspringen möchten, aber Artefakte gemäß einer normalen Build-Verwendung erstellen möchten:

-Dmaven.test.skip.exec
Chris Beach
quelle
1
Dies war die Antwort, nach der ich gesucht habe, funktioniert einwandfrei. Danke.
Binita Bharati
Wie zum Teufel soll ich mich daran erinnern? Warum nicht einen einfachen offensichtlichen und einprägsamen Alias ​​wie "skipTests" erstellen?
TheRealChx101
32

Wenn Sie dies in Windows Powershell versuchen, wird folgende Fehlermeldung angezeigt:

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

Der Grund dafür ist, dass in Powershell das " -" eine besondere Bedeutung hat und Probleme mit Maven verursacht.

Die Lösung besteht darin, ihm ein Backtick (`) voranzustellen.

mvn `-Dmaven.test.skip=true install 

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

Rosdi Kasim
quelle
1
Ich hatte das gleiche Problem und dies löste es für mich. Danke.
nsof
26
<properties>
    <maven.test.skip>true</maven.test.skip>
</properties>

ist auch eine Möglichkeit, eine POM-Datei hinzuzufügen

vimal krishna
quelle
18

Sie können das maven.test.skipFlag als JVM-Argument übergeben, um laufende Tests zu überspringen, wenn die Paketphase (und die vorherigen im Standardlebenszyklus) ausgeführt wird:

mvn package -Dmaven.test.skip=true

Sie können das skipTestsFlag auch alleine an die ausführbare mvn-Datei übergeben. Wenn Sie diese Informationen in Ihrem POM aufnehmen möchten, können Sie ein neues Profil erstellen , in dem Sie die Konfiguration kann maven-surefire-pluginzu Tests überspringen .

Vineet Reynolds
quelle
17

Sie müssen nur bereitstellen

-Dmaven.test.skip

Sie müssen nicht mehr anhängen =true.

Adriaan Koster
quelle
13

In Inllij IDEA gibt es eine Option, um auch das Testziel zu überspringen.

Geben Sie hier die Bildbeschreibung ein

Dushmantha
quelle
11

Beantwortung einer alten und akzeptierten Frage hier. Sie können dies in Ihre pom.xml einfügen, wenn Sie vermeiden möchten, ständig Befehlszeilenargumente zu übergeben:

  <properties>
    <skipTests>true</skipTests>
  </properties>
Anubhava
quelle
10

Sie können einen -DskipTestsoder -Dmaven.test.skip=truejeden mvnBefehl zum Überspringen von Tests hinzufügen . In Ihrem Fall wäre es wie folgt:

mvn package -DskipTests

ODER

mvn package -Dmaven.test.skip=true
Sahil Chhabra
quelle
4

Tests sollten immer [1] vor dem Paket ausgeführt werden. Wenn Sie die Tests ausschalten müssen, machen Sie etwas falsch. Mit anderen Worten, Sie versuchen, das falsche Problem zu lösen. Finden Sie heraus, was Ihr Problem wirklich ist, und stellen Sie diese Frage. Es klingt wie datenbankbezogen.

[1] Sie können Tests überspringen, wenn Sie schnell ein Artefakt für lokale Entwicklungszwecke generieren müssen. Im Allgemeinen sollte das Erstellen eines Artefakts jedoch immer nach einem erfolgreichen Testlauf erfolgen.

Ryan Stewart
quelle
Ich habe ein ähnliches Problem: Meine Anwendungen enthalten Websocket. Wenn ich mvn clean install starte, lande ich in einer endlosen Testreihe. Bevor ich es zwangsweise geschlossen habe, hat der Prozess 3 Stunden gedauert und die gedruckten Nachrichten waren nur über Websocket. Können Sie bitte mein Problem überprüfen, um zu sehen, was ich falsch mache? stackoverflow.com/questions/54614739/…
georgeB
Regeln haben immer Ausnahmen. Wenn Sie das nicht glauben, liegen Sie falsch.
Jay Sullivan
4

gerade mvn clean install -DskipTests

Ravinda Lakshan
quelle
3

Eine Kurzschreibweise für Maven-Build- und Skip-Tests wäre:

mvn clean install -DskipTests

Sourabh Bhavsar
quelle
2

Für Maven-Paket ohne Infektion des Maven-Tests:

<properties>
    <maven.test.failure.ignore>true</maven.test.failure.ignore>
</properties>
Igonejack
quelle
Danke, genau das brauchte ich heute.
Sean McMillan
1

Sie machen es offensichtlich falsch. Das Testen ist ein wichtiger Bestandteil der Vorverpackung. Sie sollten es nicht ignorieren oder überspringen, sondern es richtig machen. Versuchen Sie, die Datenbank zu ändern, in die die Daten eingefügt werden (z. B. test_db). Das Einrichten kann eine Weile dauern. Um sicherzustellen, dass diese Datenbank für immer verwendet werden kann, sollten Sie alle Daten bis zum Ende der Tests löschen. JUnit4 enthält Anmerkungen, die es Ihnen leicht machen. Verwenden Sie die Anmerkungen @Before, @After @Test für die richtigen Methoden. Sie müssen irgendwann dafür aufwenden, aber es wird sich lohnen!

Ozyman
quelle
9
Ich denke, die Frage sowie der Wunsch, ohne laufende Tests zu verpacken, sind vollkommen berechtigt. Ich glaube nicht, dass das OP "es offensichtlich falsch macht". Unterschiedliche Menschen und Projekte haben unterschiedliche Bedürfnisse, und diese stimmen im Allgemeinen nicht mit der Maven-Bibel oder den Überzeugungen verschiedener Menschen (wie Sie) überein, wie Softwareentwicklung funktionieren sollte. Ich denke, Ihre Antwort wäre ohne ihren herablassenden Ansatz mehr willkommen.
Zero3
1

Gehen Sie in Intellij zu Ansicht -> Werkzeugfenster -> wählen Sie Maven-Projekte. Klicken Sie in der Dropdown-Liste Lifecyle mit der rechten Maustaste auf Paket -> wählen Sie "Ihr Projekt [Paket] erstellen" ...

Geben Sie diesen Wert ein: package -Dmaven.test.skip=true -f pom.xmlin das Feld Befehlszeile. Klicken Sie auf Übernehmen. Ein Dropdown-Menü Konfigurationen ausführen sollte zusammen mit Ihrem erstellten benutzerdefinierten Maven-Befehl angezeigt werden.

Patrick Tolentino
quelle
warum wurde das herabgestimmt? Ich benutze dies jedes Mal, wenn ich mein Projekt erstellen wollte, aber Tests überspringe
Patrick Tolentino
0

mvn clean install -Dmaven.test.skip=true

arbeitete für mich da das -Dskipnicht mehr funktionierte.

Aggie Jon von 87
quelle
0
mvn package -Dmaven.test.skip=true
mcvkr
quelle
-1

Der beste und einfachste Weg, dies zu tun, ist in IntelliJ Idea im Fenster „Maven Project“ und klicken Sie einfach nicht auf die Testschaltfläche. Ich hoffe ich habe dir geholfen. Haben Sie einen guten Tag :)

Vladimir
quelle
1
Wenn Sie auf Paket klicken, werden die Tests ausgeführt, was OP zu vermeiden versucht
Charlie