Maven: Что такое плагин управления?

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

6 ответов

Решение

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

<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, то в pom ребенка вам нужно иметь объявление вроде:

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

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

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

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

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

От http://maven.apache.org/pom.html

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

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

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

Для этого мы определяем общие конфигурации зависимостей и плагинов в родительском проекте, а затем нам нужно только объявить зависимость / плагин в подмодулях, чтобы использовать его, без необходимости определять для него конфигурацию (т.е. версию или выполнение, цели, так далее). Хотя это не мешает нам изменить конфигурацию в подмодуле.

По сравнению <dependencies> а также <plugins> наследуются вместе со своими конфигурациями и не должны повторно объявляться в подмодулях, иначе может возникнуть конфликт.

это правильно?

<pluginManagement>как<dependencyManagement>оба используются для обмена только конфигурацией между родителем и его подмодулями.

Для этого мы определяем общие конфигурации зависимости и плагина в родительском проекте, а затем нам нужно только объявить зависимость/плагин в подмодулях, чтобы использовать его, без необходимости определять для него конфигурацию (т.е. версию или выполнение, цели, и т. д). Хотя это не мешает нам переопределить конфигурацию в подмодуле.

В отличие<dependencies>и<plugins>наследуются вместе с их конфигурациями и не должны повторно объявляться в подмодулях, иначе возникнет конфликт.

Другие вопросы по тегам