Maven-빌드 라이프 사이클

빌드 라이프 사이클이란 무엇입니까?

빌드 라이프 사이클은 목표가 실행되는 순서를 정의하는 잘 정의 된 일련의 단계입니다. 여기서 단계는 라이프 사이클의 한 단계를 나타냅니다. 예를 들어, 전형적인Maven Build Lifecycle 다음 단계의 순서로 구성됩니다.

단계 핸들 기술
자원 준비 리소스 복사 이 단계에서 리소스 복사를 사용자 지정할 수 있습니다.
확인 정보 검증 프로젝트가 정확하고 필요한 모든 정보를 사용할 수 있는지 확인합니다.
엮다 편집 소스 코드 컴파일은이 단계에서 수행됩니다.
테스트 테스팅 프레임 워크 테스트에 적합한 컴파일 된 소스 코드를 테스트합니다.
꾸러미 포장 이 단계에서는 POM.xml의 패키징에 언급 된대로 JAR / WAR 패키지를 만듭니다.
설치 설치 이 단계는 패키지를 로컬 / 원격 Maven 저장소에 설치합니다.
배포 배포 최종 패키지를 원격 저장소에 복사합니다.

항상 있습니다 prepost 등록 단계 goals, 특정 단계 이전 또는 이후에 실행해야합니다.

Maven이 프로젝트 빌드를 시작하면 정의 된 단계 시퀀스를 단계별로 진행하고 각 단계에 등록 된 목표를 실행합니다.

Maven에는 다음과 같은 세 가지 표준 수명주기가 있습니다.

  • clean
  • 기본값 (또는 빌드)
  • site

goal프로젝트의 구축 및 관리에 기여하는 특정 작업을 나타냅니다. 0 개 이상의 빌드 단계에 바인딩 될 수 있습니다. 빌드 단계에 바운드되지 않은 목표는 직접 호출을 통해 빌드 수명주기 외부에서 실행할 수 있습니다.

실행 순서는 목표 및 빌드 단계가 호출되는 순서에 따라 다릅니다. 예를 들어, 아래 명령을 고려하십시오. 그만큼cleanpackage 인수는 빌드 단계이며 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] ------------------------------------------------------------------