簡體   English   中英

Maven 的 pom.xml 中的 pluginManagement 是什么?

[英]What is pluginManagement in Maven's pom.xml?

這是我的 pom 文件的片段。

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

我通過命令成功使用它

mvn install

但是,當我嘗試將它包含在“pluginManagement”標簽中時,當我啟動install目標時, maven-dependency-plugin停止工作。 為什么“pluginManagement”標簽會改變構建行為? 或者我應該使用另一個目標或選項嗎?

您仍然需要添加

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

在您的構建中,因為pluginManagement只是在所有項目模塊中共享相同插件配置的一種方式。

來自 Maven 文檔:

pluginManagement : 是一個與插件一起看到的元素。 插件管理以大致相同的方式包含插件元素,除了不是為此特定項目構建配置插件信息,而是旨在配置從該項目構建繼承的項目構建。 但是,這僅配置在子項的 plugins 元素中實際引用的插件。 孩子們有權覆蓋 pluginManagement 定義。

<pluginManagement/><plugins/>之間的區別在於一個<plugin/>在:

  • <pluginManagement/>定義插件的設置,這些插件將由構建中的模塊繼承。 這對於您有父 pom 文件的情況非常有用。

  • <plugins/>是用於實際調用插件的部分。 它可能繼承自<pluginManagement/> ,也可能不繼承。

如果它不是父 POM,則您的項目中不需要<pluginManagement/> 但是,如果它是父 pom,那么在子 pom 中,您需要有如下聲明:

<plugins>
    <plugin>
        <groupId>com.foo</groupId>
        <artifactId>bar-plugin</artifactId>
    </plugin>
</plugins>

請注意您沒有定義任何配置。 您可以從父項繼承它,除非您需要根據子項目的需要進一步調整您的調用。

有關更具體的信息,您可以查看:

你在parent pom使用pluginManagement來配置它,以防任何子child pom想要使用它,但不是每個子插件都想使用它。 例如,您的super pom為 maven Javadoc 插件定義了一些選項。

並非每個child pom可能想要使用 Javadoc,因此您可以在pluginManagement部分中定義這些默認值。 想要使用 Javadoc 插件的子 pom 只需定義一個插件部分,並將從parent pompluginManagement定義繼承配置。

pluginManagement:是一個與插件一起看到的元素。 插件管理以大致相同的方式包含插件元素,除了不是為此特定項目構建配置插件信息,而是旨在配置從該項目構建繼承的項目構建。 但是,這僅配置在子項的 plugins 元素中實際引用的插件。 孩子們有權覆蓋 pluginManagement 定義。

來自http://maven.apache.org/pom.html#Plugin%5FManagement

復制自:

Maven2 - pluginManagement 和父子關系的問題

因此,如果我理解得很好,我會說<pluginManagement>就像<dependencyManagement>都用於僅共享父模塊與其子模塊之間的配置。

為此,我們在父項目中定義了依賴項和插件的通用配置,然后我們只需在子模塊中聲明依賴項/插件即可使用它,而無需為其定義配置(即版本或執行、目標、等等)。 雖然這並不能阻止我們覆蓋子模塊中的配置。

相比之下, <dependencies><plugins>是和它們的配置一起繼承的,不應該在子模塊中重新聲明,否則會發生沖突。

那正確嗎 ?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM