Maven Lifecycle이 왜 중요한가?
Maven의 Lifecycle은 Maven의 동작하는 중요 원리를 이해하는 것이기 때문에 중요합니다.
- Maven은 동작시 표준화된 생명주기를 가지고 있으며 이를 Phase라고도 한다.
- Phase는 개발자에 의해서 직접 호출할 수 있다.
- 대부분의 Maven Plugin은 특정 Phase에 맞춰서 동작하도록 설계되어 있다.
- 기존의 빌드 도구는 Phase를 개발자가 임의대로 만들어서 사용했기 때문에 빌드 과정이 표준화되지 못했다.
- 이런 이유로 각 회사마다, 각 개발자마다 각기 다른 빌드 스크립트를 작성하였고, 빌드 스크립트 구조나 코드 작성 방법도 서로 매우 상이하였다.
- Maven은 표준화된 Lifecycle을 가지고 있고 그것에 맞춰서 Plugin이 동작하는 구조로 되어 있어서 Plugin을 만들기만 하면 기능을 무궁무진하게 확장할 수 있다.
- 이러한 일을 주도적으로 하는 것이 Maven 내부에 포함되어 있는 Plexus Container이다.
- 특정 Phase가 되면 해당 Maven Plugin이 실행된다. 예를 들어 Maven Compile Plugin은 compile Phase를 포함하여 컴파일과 관련된 모든 Phase에서 상황에 맞춰서 동작한다.
Maven Lifecycle
다음은 Maven의 Lifecycle입니다. Phase라고 부르는 것이 Lifecycle을 처리하는 단계로 보면 되며 Phase = Lifecycle로 봐도 무방합니다. 또한 개발자는 Phase를 직접 지정하여 해당 단계를 까지 실행할 수 있습니다. 다음에서 파란색으로 표시한 Phase는 가장 많이 사용하는 Phase입니다. 예를 들어 compile
Phase를 실행하면 validate
→ compile
까지 실행됩니다. 실행은 mvn compile
로 Maven을 실행하면 됩니다.
Phase | Description |
---|---|
validate | Validation of project is carried out and provides the necessary information required to complete the build process. |
generate-resources | Source code generation to include while compiling. |
process-sources | Source code is processed. |
generate-resources | Resource generation to include in packages. |
process-resources | Resources packing and copying into destination directory and is ready for package. |
compile | Source code compilation |
process-classes | Generated files into post-process after compilation. |
generate-test-sources | Test source generation to include in compilation. |
process-test-sources | Processing the test source code. |
generate-test-resources | Creation of resources to test. |
process-test-resources | Copying and processing the resources to test destination. |
test-compile | Compiling the test source code to test destination. |
test | With unit testing framework, one can run the tests. |
prepare-package | Preparing the package by performing operations before actual packaging. |
package | Gather the compiled code and package in JAR,WAR or EAR. |
pre-integration test | The actions to be performed before integration tests are executed like setting the environment. |
integration test | Processing and deploying the package. |
post-integration test | Performing the action after executing the integration tests like cleaning the environment. |
verify | Checking the packages are valid or not. |
install | Installing the package into local repository. |
deploy | Copying the package into remote repository. |
IntelliJ IDEA의 Maven
다음은 IntelliJ IDEA의 Maven 기능에서 제공하는 Lifecycle 화면으로써 Maven에서 지원하는 모든 Maven Lifecycle을 제공하기 보다는 가장 많이 사용하는 Lifecycle만 제공합니다.
만약에 수동으로 Maven의 다른 lifecycle을 직접 호출하는 경우 IntelliJ IDEA에서 다음과 같이 Run/Debug Configuration을 Maven으로 생성하여 직접 지정하면 됩니다.