Wie kann ich das Maven-Release-Plugin dazu bringen, meine Tests zu überspringen?

177

Wie kann ich das Maven-Release-Plugin zum Laufen bringen, ohne die Tests auszulösen?

Ich habe versucht

-Dmaven.test.skip=true 

und

-DskipTests 

und

-DpreparationGoals=clean

... aber keine Arbeit.

Ja, ich weiß, ich sollte nicht freigeben, wenn die Tests nicht bestanden werden, aber ich habe keine Kontrolle darüber, dass meine Mitarbeiter zuverlässige Tests schreiben.

Steven
quelle

Antworten:

406

-Darguments="-DskipTests" ist das, was Sie wollen, oder explizit die gegabelten Ausführungen im POM zu konfigurieren.

bmargulies
quelle
1
Es funktioniert für mich, danke und +1 aber ... Wny ist das notwendig?
javamonkey79
5
IT ist erforderlich, da der Freigabeprozess einen neuen Maven-Prozess auslöst und die tpical -DskipTests nicht als Systemeigenschaften weitergegeben werden.
Eddie
4
Ich wünschte, ich könnte dich abstimmen 2. Ich habe stundenlang versucht, dies richtig zu machen ... aber 1. Habe ich etwas in der Dokumentation verpasst oder fehlt in der MVN-Dokumentation etwas? 2. Ich hatte <skipTests>true</skipTests>in meiner Firma POM konfiguriert. Hat immer noch nicht funktioniert. Was funktioniert hat, war Ihre Lösung.
Pulak Agrawal
Benötigen Sie eine bestimmte Konfiguration im POM, damit dies funktioniert?
DenCowboy
42

-Darguments="..."Übergibt Argumente an den Forked Maven-Prozess. Es ist jedoch wichtig zu wissen, dass hier zwei verschiedene Schalter verwendet werden. Der -DskipTestsMaven zwingt Maven, keine Tests auszuführen, aber die Tests werden noch kompiliert (dies ist wichtig, wenn Sie Abhängigkeiten von einem Test-Jar-Typ haben). Die -Dmaven.test.skip=trueKräfte müssen nicht einmal die Tests zusammenstellen, was bedeutet, dass keine Testgläser erzeugt werden.

Sie müssen also verwenden -Darguments, aber nur Tests überspringen, die die Verwendung ausführen skipTests, um die Kompilierung der Verwendung zu stoppen maven.test.skip.

Softwareentwickler
quelle
21

Wenn Sie nur Integrationstests überspringen möchten, gehen Sie folgendermaßen vor:

-Darguments="-DskipITs"
David Gilks
quelle
3

Sie haben zu unterschiedliche Möglichkeiten, um Tests mit dem Release-Plugin zu vermeiden und zu überspringen

  • Die erste besteht darin, als Argument für cli das Release-Ziel oder die Release-Phasen zu übergeben, indem ein -Darguments bereitgestellt wird:

Beispiel: mvn -X -Darguments="-Dmaven.javadoc.skip=true -Dmaven.test.skipTests=true -Dmaven.test.skip=true" -P release-mode release:prepare

-Die zweite besteht darin, diese Argumente für Ihre pom.xml im Build wie folgt auszuführen:

<plugin>    
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.scm</groupId>
                        <artifactId>maven-scm-provider-gitexe</artifactId>
                        <version>1.9.4</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <skip>true</skip>
                    <skipTests>true</skipTests>
                    <preparationGoals>clean validate</preparationGoals>
                    <arguments>-Dmaven.javadoc.skip=true -Dmaven.test.skipTests=true -Dmaven.test.skip=true</arguments>
                    <useReleaseProfile>false</useReleaseProfile>
                    <releaseProfiles>release-mode</releaseProfiles>
                    <tagNameFormat>TEST-@{project.version}</tagNameFormat>
                </configuration>
            </plugin>

Beachten Sie, dass die zweite Methode die erste überschreibt.

Ich habe Ihnen empfohlen, die Freigabe zuerst für eine einzelne Aktion vorzubereiten. Anschließend können Sie die Datei release.properties im Arbeitsverzeichnis bearbeiten und die exec.additionalArgumentsEigenschaften überprüfen, wenn Ihre Argumente vorhanden sind. Es wird so aussehen : exec.additionalArguments=-Dmaven.javadoc.skip\=true -Dmaven.test.skipTests\=true -Dmaven.test.skip\=true -P release-mode.

Nachdem Sie die Freigabe durchführen können.

idriss Eliguene
quelle
2

Um den gesamten Komponententest zu überspringen, wird ein Argument verwendet

-Dmaven.test.skip = true

Wenn Sie also den Unit-Test überspringen möchten, wird dies gelöst

mvn install -Dmaven.test.skip=true
mvn package -Dmaven.test.skip=true

oder alternativ können Sie skipTests im Maven-Surefire-Plugin definieren

pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.12.4</version>
      <configuration>
         <skipTests>true</skipTests>
      </configuration>
</plugin>
Mfuon Leonard
quelle
2
Diese Frage bezieht sich speziell auf das Maven-Release-Plugin, daher sind dies nicht die Maven-Ziele, die verwendet werden.
Jaap
-2

Kein Maven-Plug-In löst buchstäblich die Kompilierung oder Ausführung von Tests aus. Es sind die Maven-Lebenszyklusphasen, die die Ausführung eines oder mehrerer Plug-Ins auslösen, wenn diese Ziele an eine bestimmte Phase gebunden haben.

Es würde also ausreichen, nur ein einziges Plug-In-Ziel auszuführen, ohne Tests auszuführen:

mvn release:perform

oder mit Projektaufbau und Verpackung kombinieren:

mvn clean package release:perform
Yannis Sermetziadis
quelle