How can I get maven-release-plugin to skip my tests?
MavenMaven Release-PluginMaven Surefire-PluginMaven Problem Overview
How can I get the maven-release-plugin to run without triggering the tests?
I have tried
-Dmaven.test.skip=true
and
-DskipTests
and
-DpreparationGoals=clean
...yet none work.
Yes, I know I shouldn't release if the tests don't pass, but I don't have control over making my coworkers write reliable tests.
Maven Solutions
Solution 1 - Maven
-Darguments="-DskipTests"
is what you want, or explicitly configuring the forked executions in the pom.
Solution 2 - Maven
-Darguments="..."
passes arguments to the forked maven process, but it is important to realise that there are two different switches being used here. The -DskipTests
forces maven to not run any tests, but the tests are still compiled (this is important if you have any dependencies on a test-jar type). The -Dmaven.test.skip=true
forces maven to not even compile the tests, which means that any test-jars will not be generated.
So, you must use -Darguments
, but to skip tests running use only skipTests
, to stop them compiling use maven.test.skip
.
Solution 3 - Maven
If you just want to skip integration tests, this will do it:
-Darguments="-DskipITs"
Solution 4 - Maven
you have too differents choices to avoid and skip tests with the release plugin
- The first is to pass as argument on cli to the release goal or phases by providing a -Darguments:
exemple: mvn -X -Darguments="-Dmaven.javadoc.skip=true -Dmaven.test.skipTests=true -Dmaven.test.skip=true" -P release-mode release:prepare
-The second is to perform thoses arguments on your pom.xml in the build like this:
<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>
Note that the second method override the first.
I recommanded you to prepare release first on a single action and then you can edit the release.properties file on the working directorie and look the exec.additionalArguments
properties if your arguments are there. It will look like: exec.additionalArguments=-Dmaven.javadoc.skip\=true -Dmaven.test.skipTests\=true -Dmaven.test.skip\=true -P release-mode
.
After you can perform the release.
Solution 5 - Maven
Use the following argument to skip test
> -Darguments="-DskipTests"
or
alternatively skipping by default
[...]
<properties>
<skipTests>true</skipTests>
</properties>
[...]
Solution 6 - Maven
I have managed to avoid running the verify
goal by simply adding the configuration
preparationGoals
to clean
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
<configuration>
<preparationGoals>clean</preparationGoals> <!-- See here -->
</configuration>
</plugin>