Maven-빌드 라이프 사이클
빌드 라이프 사이클이란 무엇입니까?
빌드 라이프 사이클은 목표가 실행되는 순서를 정의하는 잘 정의 된 일련의 단계입니다. 여기서 단계는 라이프 사이클의 한 단계를 나타냅니다. 예를 들어, 전형적인Maven Build Lifecycle 다음 단계의 순서로 구성됩니다.
단계 | 핸들 | 기술 |
---|---|---|
자원 준비 | 리소스 복사 | 이 단계에서 리소스 복사를 사용자 지정할 수 있습니다. |
확인 | 정보 검증 | 프로젝트가 정확하고 필요한 모든 정보를 사용할 수 있는지 확인합니다. |
엮다 | 편집 | 소스 코드 컴파일은이 단계에서 수행됩니다. |
테스트 | 테스팅 | 프레임 워크 테스트에 적합한 컴파일 된 소스 코드를 테스트합니다. |
꾸러미 | 포장 | 이 단계에서는 POM.xml의 패키징에 언급 된대로 JAR / WAR 패키지를 만듭니다. |
설치 | 설치 | 이 단계는 패키지를 로컬 / 원격 Maven 저장소에 설치합니다. |
배포 | 배포 | 최종 패키지를 원격 저장소에 복사합니다. |
항상 있습니다 pre 과 post 등록 단계 goals, 특정 단계 이전 또는 이후에 실행해야합니다.
Maven이 프로젝트 빌드를 시작하면 정의 된 단계 시퀀스를 단계별로 진행하고 각 단계에 등록 된 목표를 실행합니다.
Maven에는 다음과 같은 세 가지 표준 수명주기가 있습니다.
- clean
- 기본값 (또는 빌드)
- site
ㅏ goal프로젝트의 구축 및 관리에 기여하는 특정 작업을 나타냅니다. 0 개 이상의 빌드 단계에 바인딩 될 수 있습니다. 빌드 단계에 바운드되지 않은 목표는 직접 호출을 통해 빌드 수명주기 외부에서 실행할 수 있습니다.
실행 순서는 목표 및 빌드 단계가 호출되는 순서에 따라 다릅니다. 예를 들어, 아래 명령을 고려하십시오. 그만큼clean 과 package 인수는 빌드 단계이며 dependency:copy-dependencies 목표입니다.
mvn clean dependency:copy-dependencies package
여기서 클린 단계가 먼저 실행되고dependency:copy-dependencies goal, 마지막으로 패키지 단계가 실행됩니다.
깨끗한 라이프 사이클
우리가 실행하면 MVN 후 깨끗한 명령을, Maven은 다음과 같은 단계로 구성된 청소주기를 호출합니다.
- pre-clean
- clean
- post-clean
Maven 정리 목표 (clean : clean)는 정리 수명주기 의 정리 단계에 바인딩됩니다 . 이것의clean:cleangoal빌드 디렉토리를 삭제하여 빌드의 출력을 삭제합니다. 따라서 mvn clean 명령이 실행되면 Maven은 빌드 디렉토리를 삭제합니다.
위의 클린 라이프 사이클 단계에서 목표를 언급하여이 동작을 사용자 지정할 수 있습니다.
다음 예제에서는 maven-antrun-plugin : run 목표를 정리 전, 정리 및 정리 후 단계에 연결합니다. 이를 통해 클린 라이프 사이클의 단계를 표시하는 텍스트 메시지를 에코 할 수 있습니다.
C : \ MVN \ project 폴더에 pom.xml을 만들었습니다.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-clean</id>
<phase>pre-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.clean</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-clean</id>
<phase>post-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-clean phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
이제 명령 콘솔을 열고 pom.xml이 포함 된 폴더로 이동하여 다음을 실행합니다. mvn 명령.
C:\MVN\project>mvn post-clean
Maven은 클린 라이프 사이클의 모든 단계를 처리하고 표시하기 시작합니다.
[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
[echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
[echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: > 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------
튜닝을 시도 할 수 있습니다. mvn clean 명령, 표시됩니다 pre-clean그리고 깨끗합니다. 아무것도 실행되지 않습니다.post-clean 단계.
기본 (또는 빌드) 수명주기
이것은 Maven의 기본 라이프 사이클이며 애플리케이션을 빌드하는 데 사용됩니다. 다음과 같은 21 단계가 있습니다.
Sr. 아니. | 수명주기 단계 및 설명 |
---|---|
1 | validate 프로젝트가 올 바르고 빌드 프로세스를 완료하는 데 필요한 모든 정보를 사용할 수 있는지 확인합니다. |
2 | initialize 빌드 상태를 초기화합니다 (예 : 속성 설정). |
삼 | generate-sources 컴파일 단계에 포함 할 소스 코드를 생성합니다. |
4 | process-sources 예를 들어 모든 값을 필터링하는 등 소스 코드를 처리합니다. |
5 | generate-resources 패키지에 포함 할 리소스를 생성합니다. |
6 | process-resources 패키징 단계를 위해 준비된 대상 디렉터리로 리소스를 복사하고 처리합니다. |
7 | compile 프로젝트의 소스 코드를 컴파일하십시오. |
8 | process-classes 예를 들어 Java 클래스에서 바이트 코드 향상 / 최적화를 수행하기 위해 컴파일에서 생성 된 파일을 사후 처리합니다. |
9 | generate-test-sources 컴파일 단계에 포함될 테스트 소스 코드를 생성합니다. |
10 | process-test-sources 예를 들어 모든 값을 필터링하는 등 테스트 소스 코드를 처리합니다. |
11 | test-compile 테스트 소스 코드를 테스트 대상 디렉터리로 컴파일합니다. |
12 | process-test-classes 테스트 코드 파일 컴파일에서 생성 된 파일을 처리합니다. |
13 | test 적절한 단위 테스트 프레임 워크를 사용하여 테스트를 실행합니다 (Junit은 하나입니다). |
14 | prepare-package 실제 포장하기 전에 포장 준비에 필요한 모든 작업을 수행하십시오. |
15 | package 컴파일 된 코드를 가져와 JAR, WAR 또는 EAR 파일과 같은 배포 가능한 형식으로 패키징하십시오. |
16 | pre-integration-test 통합 테스트를 실행하기 전에 필요한 조치를 수행하십시오. 예를 들어 필요한 환경을 설정합니다. |
17 | integration-test 통합 테스트를 실행할 수있는 환경에서 필요한 경우 패키지를 처리하고 배포합니다. |
18 | post-integration-test 통합 테스트가 실행 된 후 필요한 작업을 수행합니다. 예를 들어, 환경 청소. |
19 | verify 검사를 실행하여 패키지가 유효하고 품질 기준을 충족하는지 확인합니다. |
20 | install 다른 프로젝트에서 로컬로 종속성으로 사용할 수있는 로컬 저장소에 패키지를 설치합니다. |
21 | deploy 다른 개발자 및 프로젝트와 공유 할 수 있도록 최종 패키지를 원격 저장소에 복사합니다. |
언급 할 가치가있는 Maven Lifecycles와 관련된 몇 가지 중요한 개념이 있습니다.
예를 들어 Maven 명령을 통해 단계가 호출되는 경우 mvn compile, 해당 단계까지의 단계 만 실행됩니다.
패키징 유형 (JAR / WAR / EAR)에 따라 다른 Maven 목표는 Maven 라이프 사이클의 다른 단계에 바인딩됩니다.
다음 예제에서는 빌드 라이프 사이클의 몇 단계에 maven-antrun-plugin : run 목표를 첨부합니다. 이를 통해 라이프 사이클의 단계를 표시하는 텍스트 메시지를 에코 할 수 있습니다.
C : \ MVN \ project 폴더에서 pom.xml을 업데이트했습니다.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.validate</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>validate phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.compile</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>compile phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.test</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>test phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.package</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>package phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.deploy</id>
<phase>deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
이제 명령 콘솔을 열고 pom.xml이 포함 된 폴더로 이동하여 다음을 실행합니다. mvn 명령.
C:\MVN\project>mvn compile
Maven은 처리를 시작하고 컴파일 단계까지 빌드 라이프 사이클의 단계를 표시합니다.
[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [compile]
[INFO] -----------------------------------------------------------------
-
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
[echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered
resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
[echo] compile phase
[INFO] Executed tasks
[INFO] -----------------------------------------------------------------
-
[INFO] BUILD SUCCESSFUL
[INFO] -----------------------------------------------------------------
-
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] -----------------------------------------------------------------
-
사이트 라이프 사이클
Maven Site 플러그인은 일반적으로 보고서 작성, 사이트 배포 등을위한 새로운 문서를 작성하는 데 사용됩니다. 다음 단계가 있습니다.
- pre-site
- site
- post-site
- site-deploy
다음 예에서는 maven-antrun-plugin:run사이트 라이프 사이클의 모든 단계에 대한 목표입니다. 이를 통해 라이프 사이클의 단계를 표시하는 텍스트 메시지를 에코 할 수 있습니다.
C : \ MVN \ project 폴더에서 pom.xml을 업데이트했습니다.
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-site</id>
<phase>pre-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site</id>
<phase>site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-site</id>
<phase>post-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site-deploy</id>
<phase>site-deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site-deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
이제 명령 콘솔을 열고 pom.xml이 포함 된 폴더로 이동하여 다음을 실행합니다. mvn 명령.
C:\MVN\project>mvn site
Maven은 처리를 시작하고 사이트 단계까지의 사이트 라이프 사이클 단계를 표시합니다.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
[echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
[echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] ------------------------------------------------------------------