Подтвердить что ты не робот

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" изменяет поведение сборки? Или я должен использовать другую цель или вариант?

4b9b3361

Ответ 1

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

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

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

Из документации Maven:

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

Ответ 2

Разница между <pluginManagement/> и <plugins/> заключается в том, что <plugin/> под:

  • <pluginManagement/> определяет параметры для плагинов, которые будут унаследованы модулями в вашей сборке. Это отлично подходит для случаев, когда у вас есть родительский файл pom.

  • <plugins/> является фактическим вызовом плагина. Он может быть или не быть унаследован от <pluginManagement/>.

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

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

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

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

Ответ 3

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

Ответ 4

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

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

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

Maven2 - проблема с отношениями pluginManagement и parent-child