2012-10-02 40 views
7

我在我的父母pom.xml中使用pluginManagement元素爲其所有子項配置插件。例如,我有以下配置:Maven插件管理配置繼承奇怪行爲

<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元素孩子勁歌。事實上,如果我從孩子POM刪除此:

<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

是的,我的pom包裝是罐子。所以,這是因爲'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

Maven的所採用的簡單的規則是這樣的:放置在${basedir}/src/main/resources目錄內的任何目錄或文件被打包在完全相同的結構開始在JAR的基礎你的JAR。

+0

我知道'src/main/resources',但是我的配置(也許我不應該用省略號代替它,我只是認爲這是不必要的浪費空間)將幾個文件複製到不同的位置,這是什麼儘管該插件已從兒童pom中移除,但仍可以工作。我已經更新了關於此事的問題。 –