David Xia
David Xia

Reputation: 5453

how to make maven release plugin skip tests?

I'm running mvn release:prepare -Darguments="-Dmaven.test.skip=true -DskipTests" on the master checkout of Spotify's docker-client. But I can't get maven's release plugin to skip the tests. Why doesn't maven in this case respect the CLI flags?

I'm also curious what causes the release plugin to execute the surefire-plugin. There's no surefire-plugin specified in pom.xml.

mvn --version

Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T12:29:23-05:00)
Maven home: /usr/local/Cellar/maven/3.2.5/libexec
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"

Upvotes: 50

Views: 47293

Answers (5)

haridsv
haridsv

Reputation: 9693

This is one of the first hits in google for this problem and yet doesn't have the most likely explanation and solution, so here is my attempt.

I faced the same issue as the OP in running release:prepare with -DskipTests passed in via -Darguments not getting recognized. After digging in, I noticed that a grandparent POM (parent of the parent) has the following config:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.2</version>
    <configuration>
        <arguments>-B</arguments>
    </configuration>
</plugin>

It actually has more config, but I only show what is most relevant for this problem, which is the <arguments>-B</arguments>. This is hardcoding the arguments configuration parameter to -B instead of letting it read the arguments property. To get around, I added the below in the project pom and it started working:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <configuration>
        <arguments>${arguments}</arguments>
    </configuration>
</plugin>

Upvotes: 6

nrkkalyan
nrkkalyan

Reputation: 189

I have used the following in my pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.3</version>
    <configuration>
        <tagNameFormat>v@{project.version}</tagNameFormat>
        <arguments>-Dmaven.javadoc.skip=true -Dmaven.test.skipTests=true -Dmaven.test.skip=true</arguments>
    </configuration>
</plugin>

Upvotes: 6

OrangeDog
OrangeDog

Reputation: 38797

This works with Maven 3.6 (and probably some earlier versions).

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.5.3</version>
    <configuration>
        <arguments>-DskipTests</arguments>
    </configuration>
</plugin>

Upvotes: 4

David Xia
David Xia

Reputation: 5453

This worked for me. I wanted to both prepare and perform the release.

mvn clean -DskipTests -Darguments=-DskipTests release:prepare release:perform

Upvotes: 148

khmarbaise
khmarbaise

Reputation: 97507

There are two things. First if you like to run a release you need to run mvn release:perform which really runs the step for the final release and not the mvn release:prepare. If you like to skip the tests in mvn release:prepare you should use mvn -Dmaven.test.skip=true plus the given arguments you have defined.

Apart from that maven-surefire-plugin is defined in the default life cylce

Upvotes: -10

Related Questions