Reputation: 5014
I am using Maven 2.2.1 and to build my project I used this command
mvn clean install -Dmaven.test.skip=true
However, the build failed saying it couldn't find one of the artifact. However, when I used:
mvn clean install -DskipTests
everything worked fine.
So far I have been thinking that these 2 commands are equivalent. However, this link seems to suggest that -Dmaven.test.skip=true
also skips compiling the test cases.
However, that still didn't explain to me why one command is working and another is not. Will be thankful if anyone please explain this to me.
Upvotes: 471
Views: 903312
Reputation: 4092
For the fastest build, to skip both compiling the test files and running the tests:
mvn install -Dmaven.test.skip
From the Maven Surefire Plugin docs:
... you can also use the maven.test.skip property to skip compiling the tests. maven.test.skip is honored by Surefire, Failsafe and the Compiler Plugin.
Even more ways to speed up installing can be found at this answer to the question "Ways to make maven build faster?".
Upvotes: 16
Reputation: 2860
To skip the test case during mvn clean install
, I used -DskipTests
parameter in the following command
mvn clean install -DskipTests
in the terminal window.
Upvotes: 47
Reputation: 14762
It should be mentioned that maven.test.skip
mentioned in a few answers herein also skips the default-testResources
execution:
...
[INFO]
[INFO] --- maven-resources-plugin:3.3.0:testResources (default-testResources) @ project ---
[INFO] Not copying test resources
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ project ---
[INFO] Not compiling test sources
[INFO]
...
whereas maven.main.skip
of compiler:compile
doesn't do that with default-resources
:
...
[INFO]
[INFO] --- maven-resources-plugin:3.3.0:resources (default-resources) @ project ---
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ project ---
[INFO] Not compiling main sources
[INFO]
...
Upvotes: 0
Reputation: 1671
I had some inter-dependency with the tests in order to build the package.
The following command manage to override the need for the test artifact in order to complete the goal:
mvn -DskipTests=true package
And also you can use the below command :-
mvn clean install -Dmaven.test.skip=true
Upvotes: 141
Reputation: 796
I use the following for skipping both compiling and running tests (maven 3.8.1) :
mvn install -Dmaven.test.skip.exec -Dmaven.test.skip=true
Upvotes: 2
Reputation: 4044
I can give you an example which results in the same problem, but it may not give you an answer to your question. (Additionally, in this example, I'm using my Maven 3 knowledge, which may not apply for Maven 2.)
In a multi-module maven project (contains modules A
and B
, where B
depends on A
), you can add also a test dependency of A
in B
.
This dependency in B
may look as follows:
<dependency>
<groupId>com.foo</groupId>
<artifactId>A</artifactId>
<classifier>tests</classifier>
<type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 3. -->
<scope>test</scope>
</dependency>
(For more information refer to https://maven.apache.org/guides/mini/guide-attached-tests.html)
Note that project A
usually produces a secondary artifact with a classifier tests
(i.e. .../com/foo/A/<version>/A-<version>-tests.jar
) where the test classes and test resources are located inside.
If you build project A
with -Dmaven.test.skip=true
, you will get a dependency resolution error when building B
unless A
's test artifact is found in your local repo or remote repositories. The reason is that the test classes of A
were neither compiled nor the tests
artifact of A
was produced.
However, if you build A
with -DskipTests
its tests
artifact will be produced (though the tests won't run) and the dependency in B
will be resolved successfully.
Upvotes: 22
Reputation: 119
With latest version of Maven
The way of giving command bit change.
below command will works perfectly
mvn clean install "-Dmaven.test.skip=true"
Upvotes: 5
Reputation: 1247
There is a difference between each parameter.
The -DskipTests
skip running tests phase, it means at the end of this process you will have your tests compiled.
The -Dmaven.test.skip=true
skip compiling and running tests phase.
As the parameter -Dmaven.test.skip=true
skip compiling you don't have the tests artifact.
For more information just read the surfire documentation: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html
Upvotes: 111
Reputation: 1985
I have another approach for Intellij users, and it is working very fine for me:
Upvotes: 13
Reputation: 1474
The parameter -DskipTests may not work depending on your surefire-plugin version.
You can use "-Dmaven.test.skip.exec" instead of "-DskipTests"
Source: Surefire Parameter Details
Upvotes: 18
Reputation: 310993
As you noted, -Dmaven.test.skip=true
skips compiling the tests. More to the point, it skips building the test artifacts. A common practice for large projects is to have testing utilities and base classes shared among modules in the same project.
This is accomplished by having a module require a test-jar
of a previously built module:
<dependency>
<groupId>org.myproject.mygroup</groupId>
<artifactId>common</artifactId>
<version>1.0</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
If -Dmaven.test.skip=true
(or simply -Dmaven.test.skip
) is specified, the test-jar
s aren't built, and any module that relies on them will fail its build.
In contrast, when you use -DskipTests
, Maven does not run the tests, but it does compile them and build the test-jar, making it available for the subsequent modules.
Upvotes: 291
Reputation: 1085
During maven compilation you can skip test execution by adding following plugin in pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
Upvotes: 8