Maven: что такое pluginManagement?


это фрагмент моего файла 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",maven-dependency-plugin перестает работать, когда я запустить install цель. Почему тег pluginManagement изменяет поведение сборки? Или я должен использовать другую цель или вариант?

4 190

4 ответа:

вам все равно нужно добавить

<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/>.

не нужно <pluginManagement/> в вашем проекте, если это не Родительский пом. Однако, если это родительский pom, то в POM ребенка вам нужно иметь объявление типа:

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

обратите внимание, как вы не определяете никакой конфигурации. Вы можете наследовать его от родителя, если вам не нужно дополнительно настроить вызов в соответствии с потребностями дочернего проекта.

для получения более подробной информации, вы можете увидеть:

вы используете pluginManagement в Родительском pom для его настройки в случае, если какой-либо дочерний POM хочет его использовать, но не каждый дочерний плагин хочет его использовать. Примером может быть то, что ваш super pom определяет некоторые параметры для плагина Maven Javadoc. Не каждый дочерний pom может захотеть использовать Javadoc, поэтому вы определяете эти значения по умолчанию в разделе pluginManagement. Дочерний pom, который хочет использовать плагин Javadoc, просто определяет раздел плагина и наследует конфигурацию из определения pluginManagement в Родительском пом.

pluginManagement: это элемент, который виден вдоль боковых плагинов. Управление плагинами содержит элементы плагинов во многом таким же образом, за исключением того, что вместо настройки информации плагина для этой конкретной сборки проекта, он предназначен для настройки сборки проекта, которые наследуются от этого. Однако это только настраивает плагины, на которые фактически ссылаются в элементе plugins в дочерних элементах. Дети имеют полное право переопределить pluginManagement определение.

от http://maven.apache.org/pom.html#Plugin%5FManagement

скопировано из :

Maven2-проблема с pluginManagement и родительско-дочерними отношениями