Maven Lifecycle and Basic Maven Commands
Maven is a powerful project management tool that is based on POM (project object model), used for projects build, dependency and documentation. It is a tool that can be used for building and managing any Java-based project. Maven makes the day-to-day work of Java developers easier and helps with the building and running of any Java-based project.
For more details on how Maven works, how to install Maven and its applications, please visit: Introduction to Apache Maven
Maven Lifecycle: Below is a representation of the default Maven lifecycle and its 8 steps: Validate, Compile, Test, Package, Integration test, Verify, Install and Deploy.
The default Maven lifecycle consists of 8 major steps or phases for compiling, testing, building and installing a given Java project as specified below:
- Validate: This step validates if the project structure is correct. For example – It checks if all the dependencies have been downloaded and are available in the local repository.
- Compile: It compiles the source code, converts the .java files to .class and stores the classes in target/classes folder.
- Test: It runs unit tests for the project.
- Package: This step packages the compiled code in distributable format like JAR or WAR.
- Integration test: It runs the integration tests for the project.
- Verify: This step runs checks to verify that the project is valid and meets the quality standards.
- Install: This step installs the packaged code to the local Maven repository.
- Deploy: It copies the packaged code to the remote repository for sharing it with other developers.
Maven follows a sequential order to execute the commands where if you run step n, all steps preceding it (Step 1 to n-1) are also executed. For example – if we run the Installation step (Step 7), it will validate, compile, package and verify the project along with running unit and integration tests (Step 1 to 6) before installing the built package to the local repository.
- mvn clean: Cleans the project and removes all files generated by the previous build.
- mvn compile: Compiles source code of the project.
- mvn test-compile: Compiles the test source code.
- mvn test: Runs tests for the project.
- mvn package: Creates JAR or WAR file for the project to convert it into a distributable format.
- mvn install: Deploys the packaged JAR/ WAR file to the local repository.
- mvn deploy: Copies the packaged JAR/ WAR file to the remote repository after compiling, running tests and building the project.
Generally when we run any of the above commands, we add the mvn clean step so that the target folder generated from the previous build is removed before running a newer build. This is how the command would look on integrating the clean step with install phase: mvn clean install
Similarly, if we want to run the step in debug mode for more detailed build information and logs, we will add -X to the actual command. Hence, the install step with debug mode on will have the following command: mvn -X install
Consider a scenario where we do not want to run the tests while packaging or installing the Java project. In this case, we use -DskipTests along with the actual command. If we need to run the install step by skipping the tests associated with the project, the command would be: mvn install -DskipTests