English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Maven 빌드 라이프사이클은 프로젝트 빌드와 배포 과정을 정의합니다.
типичный Maven 빌드(build) 라이프사이클은 다음 단계의 시퀀스로 구성됩니다:
단계 | 처리 | 설명 |
---|---|---|
��확인 validate | 프로젝트��확인 | 프로젝트가 올바르게되었는지 그리고 모든 필요한 정보가 사용 가능한지 확인합니다 |
컴파일 compile | 컴파일 실행 | 소스 코드 컴파일은 이 단계에서 완료됩니다 |
테스트 Test | 테스트 | 적절한 유닛 테스트 프레임워크(예: JUnit)를 사용하여 테스트를 실행합니다. |
패키지 package | 打包 | JAR 생성/WAR 패키지가 pom.xml에서 정의된 패키지를 참조하고 있으면 |
확인 verify | 확인 | 통합 테스트 결과를 확인하여 품질이 충분하도록 합니다 |
설치 install | 설치 | 로컬 저장소에 패키지를 설치하여 다른 프로젝트에서 사용할 수 있게 합니다 |
배포 deploy | 배포 | 최종 프로젝트 패키지를 원격 저장소에 복사하여 다른 개발자와 프로젝트와 공유합니다 |
default 라이프사이클을 완료하기 위해, 이 단계(위에 나열되지 않은 다른 라이프사이클 단계를 포함하여)는 순서대로 실행됩니다.
Maven은 다음 세 가지 표준 라이프사이클을 가집니다:
clean:프로젝트 정리 처리
default(또는 build):프로젝트 배포 처리
site:프로젝트 사이트 문서 생성 처리
하나의 플러그인 목표는 특정 작업을 대표합니다(빌드 단계보다 세세합니다), 이는 프로젝트의 빌드와 관리에 도움이 됩니다. 이 목표는 여러 단계에 바인딩되거나 바인딩되지 않을 수 있습니다. 바인딩된 빌드 단계에 없는 목표는 빌드 라이프사이클이 외부에서 직접 호출하여 실행할 수 있습니다. 이 목표의 실행 순서는 호출된 목표와 빌드 단계의 순서에 따릅니다.
예를 들어, 다음 명령어를 고려해 보세요:
clean과 pakage는 빌드 단계입니다, dependency:copy-dependencies는 목표입니다
mvn clean dependency:copy-dependencies package
여기서 clean 단계가 먼저 실행되고, 그 다음 dependency:copy-dependencies 목표가 실행되고, 결국 package 단계가 실행됩니다.
mvn post를 실행할 때-clean 명령어를 실행할 때, Maven이 clean 생명주기를 호출하며, 이는 다음 단계를 포함합니다:
pre-clean: clean 이전에 완료해야 할 작업을 수행합니다
clean: 이전 빌드에서 생성된 모든 파일을 제거합니다
post-clean: clean 이후에 즉시 완료해야 할 작업을 수행합니다
mvn clean의 clean은 위의 clean과 같습니다. 생명주기에서 특정 단계를 실행할 때, 그 이전의 모든 단계도 실행됩니다. 따라서 mvn clean을 실행하면 다음 두 생명주기 단계가 실행됩니다:
pre-clean, clean
mvn post를 실행하면-clean을 실행하면 다음 세 생명주기 단계가 실행됩니다:
pre-clean, clean, post-clean
위의 clean 생명주기의 어떤 단계에서도 목표를 정의하여 이 부분의 작업 행위를 수정할 수 있습니다.
아래의 예제에서, 우리는 maven-antrun-plugin:run 목표를 pre에 추가합니다.-clean, clean, post-clean 단계 중에 있습니다. 이렇게 하면 clean 생명주기의 각 단계에서 텍스트 정보를 표시할 수 있습니다.
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 단계</echo> </tasks> </configuration> </execution> <execution> <id>id.clean</id> <phase>clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>clean 단계</echo> </tasks> </configuration> </execution> <execution> <id>id.post-clean</id> <phase>post-clean</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>post-clean 단계</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
지금 명령어 프롬프트를 엽니다. pom.xml이 있는 디렉토리로 이동한 후 아래의 mvn 명령어를 실행하세요.
C:\MVN\project>mvn post-clean
Maven이 clean 생명주기의 모든 단계를 처리하고 표시하기 시작합니다.
[INFO] 프로젝트를 스캔 중... [INFO] ------------------------------------------------------------------ [INFO] Unnamed 빌드 중... - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [post-clean] [INFO] ------------------------------------------------------------------ [INFO] [antrun:run {execution: id.pre-clean}] [INFO] 작업 실행 [echo] pre-clean 단계 [INFO] 실행된 작업 [INFO] [clean:clean {execution: default}-clean}] [INFO] [antrun:run {execution: id.clean}] [INFO] 작업 실행 [echo] clean 단계 [INFO] 실행된 작업 [INFO] [antrun:run {execution: id.post}-clean}] [INFO] 작업 실행 [echo] post-clean 단계 [INFO] 실행된 작업 [INFO] ------------------------------------------------------------------ [INFO] 빌드 성공 [INFO] ------------------------------------------------------------------ [INFO] 총 시간: < 1 second [INFO] 완료된 시간: Sat Jul 07 13:38:59 IST 2012 [INFO] 최종 메모리: 4M/44M [INFO] ------------------------------------------------------------------
mvn clean 명령어를 수정하여 pre를 표시하려면 시도해 보세요.-clean 과 clean, 그리고 post-clean 단계에서는 어떠한 작업도 수행되지 않습니다。
이것은 Maven의 주요 라이프사이클로, 애플리케이션을 빌드하는 데 사용되며, 다음과 같은 것을 포함합니다. 23 단계:
라이프사이클 단계 | 설명 |
---|---|
validate(검증) | 프로젝트가 올바르게 되었는지 모든 필요한 정보가 프로젝트 빌드 과정을 완료할 수 있도록 확인합니다. |
initialize(초기화) | 빌드 상태를 초기화합니다. 예를 들어, 속성 값을 설정합니다. |
generate-sources(소스 코드 생성) | 컴파일 단계에 포함된 모든 소스 코드를 생성합니다. |
process-sources(소스 코드 처리) | 소스 코드를 처리합니다. 예를 들어, 임의의 값을 필터링합니다. |
generate-resources(자원 파일 생성) | 프로젝트 패키지에 포함될 자원 파일을 생성합니다. |
process-resources(자원 파일 처리) | 자원을 대상 디렉토리로 복사하고 처리하여 패키지 단계에 최적화된 준비를 합니다. |
compile(컴파일) | 프로젝트의 소스 코드를 컴파일합니다. |
process-classes(클래스 파일 처리) | 컴파일된 파일을 처리합니다. 예를 들어, Java class 파일에 바이트코드 최적화를 적용합니다. |
generate-test-sources(테스트 소스 코드 생성) | 컴파일 단계에 포함된 모든 테스트 소스 코드를 생성합니다. |
process-test-sources(테스트 소스 코드 처리) | 테스트 소스 코드를 처리합니다. 예를 들어, 임의의 값을 필터링합니다. |
generate-test-resources(테스트 자원 파일 생성) | 테스트를 위해 자원 파일을 생성합니다. |
process-test-resources(테스트 자원 파일 처리) | 테스트 자원을 대상 디렉토리로 복사하고 처리합니다. |
test-compile(테스트 소스 코드 컴파일) | 테스트 소스 코드를 테스트 대상 디렉토리에 컴파일합니다. |
process-test-classes(테스트 클래스 파일 처리) | 테스트 소스 코드 컴파일로 생성된 파일을 처리합니다. |
test(테스트) | 적합한 유닛 테스트 프레임워크를 사용하여 테스트를 실행합니다. 예를 들어, Juint. |
prepare-package(패키지화 준비) | 실제 패키지화 전에 패키지화를 준비하기 위해 필요한 모든 동작을 수행합니다. |
package(패키지화) | 컴파일된 코드를 배포 가능한 파일 형식으로 패키지화합니다. 예를 들어, JAR, WAR 또는 EAR 파일. |
pre-integration-test(통합 테스트 전) | 통합 테스트를 수행하기 전에 필요한 동작을 수행합니다. 예를 들어, 필요한 환경을 설정합니다. |
integration-test(통합 테스트) | 통합 테스트 환경에서 실행할 수 있도록 프로젝트를 처리하고 배포합니다. |
post-integration-test(통합 테스트 후) | 통합 테스트를 수행한 후 필요한 동작을 수행합니다. 예를 들어, 통합 테스트 환경을 정리합니다. |
verify(검증) | 프로젝트 패키지가 유효하며 품질 기준을 충족하는지 확인하기 위해 임의의 검사를 실행합니다. |
install(설치) | 프로젝트 패키지를 로컬 저장소에 설치하여 프로젝트 패키지를 다른 로컬 프로젝트의 의존성으로 사용할 수 있게 합니다. |
deploy(배포) | 최종 프로젝트 패키지를 원격 저장소에 복사하여 다른 개발자와 프로젝트와 공유합니다. |
Maven 생명 주기와 관련된 중요한 개념이 몇 가지 설명되어야 합니다:}
예를 들어 mvn compile와 같은 Maven 명령어로 단계가 호출될 때, 해당 단계 이전 및 포함된 모든 단계가 실행됩니다.
다른 Maven 목표는 패키지 유형(JAR / WAR / EAR)은 다른 Maven 생명 주기 단계에 바인딩됩니다.
아래의 예제에서, 우리는 maven-antrun-플러그인: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>검증</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo> 검증 단계</echo> </tasks> </configuration> </execution> <execution> <id>id.compile</id> <phase>컴파일</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo> 컴파일 단계</echo> </tasks> </configuration> </execution> <execution> <id>id.test</id> <phase>테스트</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo> 테스트 단계</echo> </tasks> </configuration> </execution> <execution> <id>id.package</id> <phase>패키지</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo> 패키지 단계</echo> </tasks> </configuration> </execution> <execution> <id>id.deploy</id> <phase>배포</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo> 배포 단계</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
현재 명령 프롬프트를 열고 pom.xml이 있는 디렉토리로 이동한 후 다음 mvn 명령어를 실행하세요.
C:\MVN\project>mvn compile
Maven은 컴파일 단계까지의 빌드 생명 주기를 처리하고 표시합니다.
[INFO] 프로젝트를 스캔 중... [INFO] ------------------------------------------------------------------ [INFO] Unnamed 빌드 중... - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [compile] [INFO] ------------------------------------------------------------------ [INFO] [antrun:run {execution: id.validate}] [INFO] 작업 실행 [echo] 검증 단계 [INFO] 실행된 작업 [INFO] [리소스:resources {execution: default-resources}] [WARNING] 플랫폼 인코딩(Cp1252 실제로 필터된 리소스를 복사하려면, 즉, 빌드는 플랫폼에 따라 의존합니다! [INFO] 존재하지 않는 리소스 디렉토리를 건너뜀 C:\MVN\project\src\main\resources [INFO] [컴파일러:compile {execution: default-compile}] [INFO] 컴파일할 것이 없습니다 - 모든 클래스는 최신 상태입니다 [INFO] [antrun:run {execution: id.compile}] [INFO] 작업 실행 [echo] compile phase [INFO] 실행된 작업 [INFO] ------------------------------------------------------------------ [INFO] 빌드 성공 [INFO] ------------------------------------------------------------------ [INFO] 총 시간: 2 초 [INFO] 완료된 시간: Sat Jul 07 20:18:25 IST 2012 [INFO] 최종 메모리: 7M/64M [INFO] ------------------------------------------------------------------
개발 환경에서, 아래의 명령어를 사용하여 프로젝트를 빌드하고 로컬 저장소에 설치합니다
mvn install
이 명령어는 install 단계를 실행하기 전에 default 생명주기의 단계(검증, 컴파일, 패키지 등)를 순서대로 실행합니다. 우리는 마지막 단계를 호출하면 됩니다. 여기서는 install입니다.
빌드 환경에서, 아래의 호출을 사용하여 프로젝트를 깨끗하게 빌드하고 공유 저장소에 배포합니다
mvn clean deploy
이 명령어는 다중 모듈 상황에서도 사용될 수 있습니다. 즉, 여러个子 프로젝트를 포함한 프로젝트에서 Maven는 각个子 프로젝트에서 clean 명령어를 실행한 후 deploy 명령어를 실행합니다.
Maven Site 플러그인은 일반적으로 새로운 보고서 문서, 사이트 배포 등을 생성하는 데 사용됩니다.
pre-site: 생성된 사이트 문서 이전에 완료해야 할 일을 수행합니다
site: 프로젝트의 사이트 문서를 생성합니다
post-site: 생성된 사이트 문서 이후에 완료해야 할 일을 수행하고 배포를 준비합니다
site-deploy: 생성된 사이트 문서를 특정 서버에 배포합니다
이곳에서 자주 사용되는 것은 site 단계와 site-deploy 단계를 사용하여 Maven 사이트를 생성하고发布하려고 합니다. 이는 Maven의 매우 강력한 기능으로, Manager가 좋아합니다. 문서 및 통계 자동 생성으로 매우 잘 보입니다. 아래의 예제에서, 우리는 maven-antrun-plugin:run 목표를 Site 생명주기의 모든 단계에 추가했습니다. 이렇게 하면 생명주기의 모든 텍스트 정보를 표시할 수 있습니다。
우리는 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 단계</echo> </tasks> </configuration> </execution> <execution> <id>id.site</id> <phase>site</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>site 단계</echo> </tasks> </configuration> </execution> <execution> <id>id.post-site</id> <phase>post-site</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>post-site 단계</echo> </tasks> </configuration> </execution> <execution> <id>id.site-deploy</id> <phase>site-deploy</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo>site-deploy 단계</echo> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
현재 명령 프롬프트를 열고 pom.xml이 있는 디렉토리로 이동한 후 다음 mvn 명령어를 실행하세요.
C:\MVN\project>mvn site
Maven은 site 단계까지의 site 생명주기를 처리하고 표시할 것입니다.
[INFO] 프로젝트를 스캔 중... [INFO] ------------------------------------------------------------------ [INFO] Unnamed 빌드 중... - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [site] [INFO] ------------------------------------------------------------------ [INFO] [antrun:run {execution: id.pre-site}] [INFO] 작업 실행 [echo] pre-site 단계 [INFO] 실행된 작업 [INFO] [site:site {execution: default-site}] [INFO] "About" 보고서 생성 중. [INFO] "Issue Tracking" 보고서 생성 중. [INFO] "프로젝트 팀" 보고서 생성. [INFO] "의존성" 보고서 생성. [INFO] "프로젝트 플러그인" 보고서 생성. [INFO] "연속 통합" 보고서 생성. [INFO] "소스 저장소" 보고서 생성. [INFO] "프로젝트 라이선스" 보고서 생성. [INFO] "메일링 목록" 보고서 생성. [INFO] "플러그인 관리" 보고서 생성. [INFO] "프로젝트 요약" 보고서 생성. [INFO] [antrun:run {execution: id.site}] [INFO] 작업 실행 [echo] 사이트 단계 [INFO] 실행된 작업 [INFO] ------------------------------------------------------------------ [INFO] 빌드 성공 [INFO] ------------------------------------------------------------------ [INFO] 총 시간: 3 초 [INFO] 완료된 시간: Sat Jul 07 15:25:10 IST 2012 [INFO] 최종 메모리: 24M/149M [INFO] ------------------------------------------------------------------```