I am trying to package my project. But, it automatically runs the tests previous do performing the packaging. The tests insert some content in the database. This is not what I want, I need to avoid running tests while package the application. Anybody knows how run the package with out test?
Run maven with
mvn package -Dmaven.test.skip
Just provide the command mentioned below, which will ignore executing the test cases (but will compile the test code):
mvn package -DskipTests
-DskipTests
did not work for me when I used mvn clean install -DskipTests
-DskipTests
is the same as -Dmaven.test.skip.exec=true
stackoverflow.com/a/21933970/32453 and yes it does compile the tests and not run them (whereas -Dmaven.test.skip=true
doesn't compile them)
you can add this plugin configuration to your pom if you do not want to set command line arg:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
Note that -Dmaven.test.skip prevents Maven building the test-jar artifact.
If you'd like to skip tests but create artifacts as per a normal build use:
-Dmaven.test.skip.exec
If you are trying this in Windows Powershell, you will get this error:
[ERROR] Unknown lifecycle phase ".test.skip=true". You must specify a valid lifecycle phase or a goal in the format...
The reason for this is, in Powershell the "-
" has special meaning and it is causing problem with maven.
The solution is to prepend it with a backtick (`), like so..
mvn `-Dmaven.test.skip=true install
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
is also a way to add in pom file
In Inllij IDEA there is an option also to skip test goal.
https://i.stack.imgur.com/512iH.png
You only have to provide
-Dmaven.test.skip
You no longer need to append =true
.
You can pass the maven.test.skip
flag as a JVM argument, to skip running tests when the package phase (and the previous ones in the default lifecycle) is run:
mvn package -Dmaven.test.skip=true
You can also pass the skipTests
flag alone to the mvn executable. If you want to include this information in your POM, you can create a new profile where you can configure the maven-surefire-plugin
to skip tests.
Answering an old and accepted question here. You can add this in your pom.xml if you want to avoid passing command line argument all the time:
<properties>
<skipTests>true</skipTests>
</properties>
You can add either -DskipTests
or -Dmaven.test.skip=true
to any mvn
command for skipping tests. In your case it would be like below:
mvn package -DskipTests
OR
mvn package -Dmaven.test.skip=true
just mvn clean install -DskipTests
A shorthand notation to do maven build and skip tests would be :
mvn clean install -DskipTests
Below two commands are most useful
mvn clean package -Dmaven.test.skip=true
mvn clean package -DskipTests
Thanks
Tests should always[1] run before package. If you need to turn off the tests, you're doing something wrong. In other words, you're trying to solve the wrong problem. Figure out what your problem really is, and ask that question. It sounds like it's database-related.
[1] You might skip tests when you need to quickly generate an artifact for local, development use, but in general, creating an artifact should always follow a successful test run.
For maven package without infecting maven test:
<properties>
<maven.test.failure.ignore>true</maven.test.failure.ignore>
</properties>
In Intellij, go to View -> Tool Windows -> choose Maven Projects. On the Lifecyle dropdown, right-click on package -> choose Create 'your-project [package]'...
Enter this value: package -Dmaven.test.skip=true -f pom.xml
in the Command line field. Click Apply and a Run Configurations dropdown menu should appear along with your created custom maven command.
Those who don't want to skip the test cases. just above the main test class comment out or delete annotation:
//@SpringBootTest
Then when Maven builds an app, it will still run tests inside this class but will not run SpringBoot app, so will not test the connection to DB and the build will be successful.
You are, obviously, doing it the wrong way. Testing is an important part of pre-packaging. You shouldn't ignore or skip it, but rather do it the right way. Try changing the database to which it inserts the data(like test_db). It may take a while to set it up. And to make sure this database can be used forever, you should delete all the data by the end of tests. JUnit4 has annotations which make it easy for you. Use @Before, @After @Test annotations for the right methods. You need to spend sometime on it, but it will be worth it!
mvn clean install -Dmaven.test.skip=true
worked for me since the -Dskip
did not work anymore.
mvn package -Dmaven.test.skip=true
The best and the easiest way to do it, in IntelliJ Idea in the window “Maven Project”, and just don’t click on the test button. I hope, I helped you. Have a good day :)
Success story sharing
-DskipTests
but it does not work anymore, any idea why ?skipTests
is preferred to settingmaven.test.skip
.