Вопрос-ответ

What is pluginManagement in Maven's pom.xml?

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

Переведено автоматически
Ответ 1

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

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

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

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


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


Ответ 2

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


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



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



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

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

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

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

Ответ 3

Вы используете pluginManagement in a parent pom для его настройки на случай, если какой-либо child pom захочет его использовать, но не каждый дочерний плагин хочет его использовать. Примером может быть то, что ваш super pom определяет некоторые параметры для плагина maven Javadoc.

Не каждый child pom может захотеть использовать Javadoc, поэтому вы определяете эти значения по умолчанию в pluginManagement разделе. Дочерний pom, который хочет использовать плагин Javadoc, просто определяет раздел плагина и наследует конфигурацию из pluginManagement определения в parent pom.

Ответ 4

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


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

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

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

java maven