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?


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 

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

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>

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

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/


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


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 .


17

Sie müssen nur bereitstellen

-Dmaven.test.skip

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


13

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

Geben Sie hier die Bildbeschreibung ein


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>

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

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.


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


3

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

mvn clean install -DskipTests


2

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

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

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!


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.


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.



-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 :)


1
Wenn Sie auf Paket klicken, werden die Tests ausgeführt, was OP zu vermeiden versucht
Charlie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.