Maven: How to clean integration-test configurations - java

In our maven project, we have integration test that sets all sorts of things on the integration test server.
I want to be be able to easily clean this things in a command. I want to be able to run:
mvn integration-clean
And this will clean all the things on the server, by running some cleaning mojos from my maven plugin.
How should this be done?

These are the commands in order to perform a complete integration test:
Step 1: mvn deploy
Step 2: mvn integration-test
Finally do a complete clean install in order to update the changes.
Step 3: mvn clean install
You could refer this for the exact life cycle of the build.

You must be having the integration profile defined in settings.xml.
<settings>
...
<activeProfiles>
<activeProfile>integrationProfile</activeProfile>
</activeProfiles>
...
</settings>
Assuming the integration profile is active ,
mvn clean install -P integrationProfile
should work for you.

Related

Does maven execute chained commands

i am new to maven and I am wondering is this even possible in maven?
mvn clean install deploy
or
mvn clean compile install deploy
will maven do all the steps? thanks in advance
The short answer is yes.
Maven has the concept of a build life cycle. In the example you have given
mvn clean compile install deploy
The highest phase is deploy which includes compile and install so it's the same as mvn clean deploy.

cucumber tests on docker won't fire at the integration-test phase

I'm having some problems getting my cucumber/phantomJs test to run against the docker container.
My plan is to start the tomcat docker container at the maven pre-integration-test phase. Then at the integration-test phase i want to run the cucumber tests. For this i have disabled the surefire plugin to run test phase and included the failsafe plugin. Though some how the integration-test phase does nothing. I have no idea whats wrong with it.
The docker containers work fine and are started at the pre-integration-test phase. They also stop at the post-integration-test phase. The war is deployed and runs like it should run. No problems there.
The cucumber tests run at the test phase when the surefire plugin is enabled for test. In the sample project you can change this by editing the pom at the section for the surefire plugin with to
<configuration>
<skip>true</skip>
</configuration>
I have created a sample project at https://github.com/abroer/cucumber-integration-test.git
The project can be run using mvn clean verify
Any suggestions on how to fire the cucumber tests at maven integration-test phase are appriciated.
Your cucumber test runner is called RunCukesTest. This pattern is not included by default by the failsafe plugin, see https://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#includes . You have either to rename your class to say RunCukesIt or adjust the configuration of the failsafe plugin.

Maven package/install without test (skip tests)

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
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
Reference: http://kuniganotas.wordpress.com/2011/08/12/invalid-task-test-skiptrue-you-must-specify-a-valid-lifecycle-phase/
<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.
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.
You only have to provide
-Dmaven.test.skip
You no longer need to append =true.
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.
you can use any maven goals like package / clean install
Solution: 1 ( package Goal )
mvn package -Dmaven.test.skip
mvn package -Dmaven.test.skip=true
mvn package -DskipTests
Solution: 2 ( clean install goals )
mvn clean install -Dmaven.test.skip
mvn clean install -Dmaven.test.skip=true
mvn clean install -DskipTests
Solution: 3 ( in pom.xml file )
you can use maven-skipping-tests in pom file and no need to provide
the attributes like DskipTests,Dmaven.test.skip
Pom.xml
<properties>
<java.version>1.8</java.version>
<maven.test.skip>true</maven.test.skip>
</properties>
Later you can use maven command : mvn clean install/mvn package
Reference: https://www.baeldung.com/maven-skipping-tests
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 :)

Maven deployment

mvn clean deploy -P PROD
What does this code do?
mvn jetty:run
I have a war file, do i need to run this deploy code too... i am bit confused.
I'd advise you to read the Deploy plugin documentation, ditto for the Jetty one.
From what I can see, mvn clean deploy cleans your project (suppresses compiled files), and then compiles and deploy it. mvn jetty:run launches the jetty server.
If you're completely new to Maven, it's a build system, to help you manage your dependencies and your application lifecycle. You can read more about it on the Maven site.
clean deploy
I suggest you read up on the Maven Build Lifecycle to get full details on these.
-P PROD
This runs the build under the PROD profile; presumably it is your production build.

specify pom.xml in mvn command and mix goals of other project

I have multiple questions.
Can I specify the pom.xml in mvn command?
Can I mix the goals of another project while executing mvn command on current project ?
Eg: mvn clean-otherproject comple-otherproject instal-otherproject compile-thisproject
I can do this with multiple mvn commands, but Can I do this in single maven command.
Just mvn --help would have answered the first question:
mvn -f otherPomFile.xml
No. You can simple execute the phases for the current project you are in. You can give multiple phases like
mvn clean install site site:deploy
For the first question, see khmarbaise's answer
If you want to build more than one maven project in one step, you must use modules.
In a multi-module project, if you call mvn install from the top project, all sub modules are built, unless you use the advanced reactor options (e.g. mvn install -pl util -am only builds the module 'util' and it's dependencies)

Categories

Resources