Maven : 수명주기 대 단계 대 플러그인 대 목표
이 스레드에서 누락 된 또 다른 수준의 세분성을 명확히하기 위해 늦게 답변 합니다. Maven 빌드의 가장 작은 단위 인 실행 (목표)입니다.
따라서 특정 플러그인이 제공 하는 일련의 구성된 목표를 호출 할 수있는 단계 (낮은 세분성,주기 단계) 로 구성된 빌드주기 (기본적으로 특정 전체 목표에 대한 일련의 작업 )가 있습니다 . 즉, Maven은 (또한) 플러그인 실행자이며 각 플러그인은 하나 이상의 목표를 제공 할 수 있습니다. 그런 다음 (또한) 기본 라이프 사이클에서 대부분의 경우 어느 단계에 어떤 목표를 연결할지 결정합니다 (즉, 기본값 없음). 그러나 실제로는 또 다른 수준을 가질 수 있습니다. 실행 (동일한 목표, 동일한 플러그인에서 또는 다른 플러그인에서 다른 목표)
전체를 다시 시작하기 위해 준비한 사진
실제로 Maven이 빌드 로그의 고유 한 문자열을 통해이를 표시하는 방법 (가장 작은 작업 단위)입니다.
plugin-artifactId:plugin-version:plugin-goal (goal-execution-id) @ project-name
예를 들어 다음과 같습니다.
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ sample-project ---
실제로 의미합니다 (다양한 수준의 세분화를 통해).
- 동안
compile
단계 (언급되지 불행히도)>
- Maven 컴파일러 플러그인 (
artifactId
및 version
)을 호출합니다. >
- 나는 그
compile
목표 를 불러 일으키고있다 >
default-compile
실행에 의해 정의 된대로
실제로 다른 단계 또는 동일한 단계에 바인딩 된 동일한 목표 (동일한 플러그인의)를 가질 수 있지만 다른 실행 (즉, 다른 구성)에있을 수 있기 때문에 고유합니다. maven-compiler-plugin
, 예를 들어, 또한 동안 사용되는 test-compile
단계 (ITS를 통해 컴파일 테스트 코드 (다른 상) testCompile
다른 실행에 목표) ( default-testCompile
). 또한 POM에서 지정한 실행 (및 잠재적으로 다른 구성)에 의해 정의 된대로 다른 단계에서 일부 자동 생성 코드를 컴파일 (동일한 플러그인 및 목표 사용) 할 수 있습니다.
기본 실행은 Maven 패키징 바인딩을 통해 즉시 제공됩니다 . 즉, 기본적으로 (및 구성에 대한 규칙 적용) Maven은 이미 특정 단계에서 특정 목표 (표준 플러그인의)를 호출합니다. 이러한 기본 호출의 실행 ID는 특정 규칙 에 따라 정의됩니다 .
이는 Maven 빌드의 기본 동작 (바인딩)을 실제로 재정의하려는 경우 동일한 플러그인에 대해 POM에서 정확히 동일한 실행 ID를 지정 (재정의)해야하는 이유도 설명합니다. 예를 들어, maven-compiler-plugin
동일한 default-compile
ID를 사용하지만 존재하지 않는 단계 (또는 비어있는 단계)에 바인딩 된 의 실행을 정의하기 만하면 컴파일을 건너 뛸 수 있습니다.
간단히 말해서 : 실행은 Maven에게 어떤 목표를 어떤 단계에서 어떤 구성으로 실행할 것인지 알려줍니다.
일부 실행은 기본적으로 제공됩니다 (defaul 바인딩), 이는 단 6 줄 의 maven 최소 pom 이 이미 많은 작업 (컴파일, 테스트, 패키지 등)을 수행 할 수있는 이유를 설명합니다 . 특정 단계에서 표준 플러그인의 목표를 실행합니다. 구성. 그런 다음을 통해 구성을 추가 할 수 있습니다 물건 빌드에 (실행)을 이미 구성 플러그인의 동작에 영향 없다 (이 경우에는 섹션을하지만, 단지 충분하다).pom.xml
executions
configuration
예, 빌드주기 (및 해당 단계)를 건너 뛰고 목표 (플러그인)를 직접 호출 할 수 있습니다. 다음을 상상해보십시오.
mvn compiler:compile
mvn compiler:testCompile
mvn surefire:test
mvn jar:jar
(참고 : 한 번의 호출에서만 인라인으로 호출 할 수도 있습니다.)
여기서 우리는 앱 코드, 테스트 코드, 테스트 실행 및 패키지를 컴파일합니다. 이것이 얼마나 수동적이고 오류가 발생하기 쉽고 반복적이고 시간이 많이 걸리는지 상상해보십시오. 구성에 대한 규칙은 우리에게 도움이됩니다. Maven은 빌드 수명주기와 단계를 도입 합니다. 기본 수명주기 (이름 없음, 즉 기본값)는 모범 사례 및 규칙 (Maven의 진언)에 따라 다양한 단계를 제공합니다.
위와 동일한 결과를 얻으려면 다음을 실행 mvn package
하면됩니다. 그러면 프로젝트가 자동으로 컴파일, 테스트 및 패키징됩니다. 어떻게? 플러그인 호출. 즉, 단계는 의미 있고 구성 가능한 플러그인 (목표) 실행 집합입니다. 더 표준 적으로 만들기 위해 Maven은 각 단계에 대해 먼저 선행 단계를 호출하므로 예를 들어 테스트하려는 경우 먼저 컴파일해야합니다.
추신은 동일한에 대해 여러 목표를 지정할 때 execution
두 개의 다른 목표 (따라서 여전히 고유 한 튜플)에 대해 빌드 로그에서 두 개의 다른 실행 (동일한 ID 사용)을 명확하게 볼 수 있습니다.