2012-10-02 5 views
7

pom.xml에있는 모든 자식에 대해 플러그인을 구성하려면 부모에 pluginManagement 요소를 사용하고 있습니다.Maven plugin 관리 구성 상속 이상한 동작

<pluginManagement> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
       <id>copy-artifacts</id> 
       <phase>install</phase> 
       <goals> 
        <goal>copy-resources</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>some/where/else</outputDirectory> 
        <resources> 
         <resource> 
          <directory>some/another/resource</directory> 
         </resource> 
        </resources> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
      <execution> 
       <id>copy-dependencies</id> 
       <phase>install</phase> 
       <goals> 
        <goal>copy-dependencies</goal> 
       </goals> 
       <configuration> 
        <outputDirectory>deps/dir</outputDirectory> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
</pluginManagement> 

공식 문서 pluginManagement 구성된 플러그인이 여전히 아이 리딩에 plugins 요소에 추가되어야한다고 예를 들어, 나는 다음과 같은 구성을 가지고있다. 사실, 나는 아이 치어에서이를 제거하는 경우 :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
</plugin> 

다음 maven-dependency-plugin 정지가 install 단계에서 발사. 그러나 그것은 다른 플러그인, 즉 maven-resource-plugin에 영향을 미치지 않는 것으로 보입니다. 내 아이의 치어에

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
</plugin> 

이없는 경우에도, 그 copy-resources 목표는 여전히 install 단계에서 발사과는 어떻게 구성 작업을 수행합니다.

이 동작이 나타나는 이유는 무엇입니까? 항상 상속 된 플러그인 목록이 있습니까, 아니면 내가 누락 된 항목이 있습니까?

+2

문제점을 분석하기 위해 효과적인 pom을 살펴보십시오 (mvn help : effective-pom을 통해). – khmarbaise

+0

감사합니다. 완전히 잊어 버렸습니다. 보세요. –

답변

6

전체 POM이 보이지 않습니다. 하지만 당신이 말한 행동을 감안할 때 항아리, 전쟁, 귀, 맞습니까? 리소스 플러그인은 기본적으로 이러한 패키징 유형에 대해 정의됩니다. 여기에는 리소스를 복사하는 실행이 포함됩니다 (@maba에서 설명한대로).

플러그인 정의가 하위 POM에 포함되어 있으므로 (직접 작성하지 않았더라도) Maven은 <pluginManagement> 섹션에 정의 된 실행을 Maven에서 제공 한 실행과 병합합니다.

패키징 유형별 기본 수명주기 바인딩을 설명하는 documentation이 있습니다. dependency 플러그인은 언급되지 않았습니다. 그러나 resources은; 그래서 당신은 그 차이를 관찰합니다. -X으로 실행하면 플러그인 실행이 표시됩니다.

+0

예, 포장은 병입니다. 그래서'resources-plugin'이 자동으로 포함되어 있기 때문에'pluginManagement'의 모든 설정을 자동으로 상속 받기 때문입니다. 맞습니까? 그렇다면 나는 대답을 찾았다 고 생각한다. 나는 이것이 그와 비슷한 것이라고 생각했다. 고마워요! –

+1

@VladimirMatveev 예 기본적으로 포함되어있는 다른 플러그인도 있습니다. 한가지 확실한 것은'maven-compiler-plugin'입니다. – maba

+1

@VladimirMatveev 여기서 핵심 플러그인을 찾을 수있을 것 같습니다 : [Maven Available Plugins] (http://maven.apache.org/plugins/index.html). – maba

1

Maven은 항상 src/main/resources 내부의 리소스를 복사합니다. Maven Getting Started Guide에서

:

메이븐에 의해 사용되는 간단한 규칙이있다 다음 ${basedir}/src/main/resources 디렉토리에 놓인 디렉토리 나 파일이 동일한 구조가 JAR의 기본에서 시작하여 항아리에 포장됩니다.

+0

'src/main/resources'에 대해서는 알고 있지만, 필자의 구성 (생략 부호로 바꾸지 말았어야했는데, 공간 낭비라고 생각했습니다)은 여러 파일을 다른 위치에 복사합니다. 플러그인이 하위 pom에서 제거 되었음에도 불구하고 작동합니다. 이 문제에 대한 내 질문을 업데이트했습니다. –