Що таке плагінМенеджмент у pom.xml Maven?


266

Це фрагмент мого файлу з пом.

....
        <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" змінює поведінку збірки? Або я повинен використовувати іншу мету чи варіант?

Відповіді:


299

Ще потрібно додати

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

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

З документації Maven:

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


266

Різниця між <pluginManagement/>і <plugins/>полягає в тому, що <plugin/>під:

  • <pluginManagement/>визначає параметри плагінів, які будуть успадковані модулями у вашій збірці. Це чудово для випадків, коли у вас є батьківський файл пом.

  • <plugins/>є фактичним викликом плагіна. Це може бути, а може і не бути успадкованим від а <pluginManagement/>.

Вам не потрібно мати проект <pluginManagement/>у своєму проекті, якщо це не батьківський POM. Однак якщо це батьківський пом, то в пам’ятці дитини потрібно мати декларацію типу:

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

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

Для отримання більш детальної інформації ви можете перевірити:


Дякую за відповідь Мені потрібно змішати тег pluginManagement і плагін (для Maven-залежностей-плагіна) у тому ж файлі пам’яті, тому що мені потрібно обійти трохи помилку плагіну M2E Eclipse IDE. Див stackoverflow.com/questions/8706017 / ...
Andrea Borgogelli Avveduti

7
Дякую! :) Це те саме для <dependency/>і <dependencyManagement/>. Ви визначаєте залежності (разом із їх версіями та сферами, якщо вам це подобається) у <dependencyManagement/>розділі, а потім у <dependencies/>розділі, який ви просто визначаєте groupIdта artifactId.
Карлспринг

1
якщо мені доведеться виконати плагін двічі, чи повинен я використовувати плагін?
Kalpesh Soni

@KalpeshSoni: Це залежить - можливо, ви хочете мати спільну конфігурацію між двома стратами, які вам не потрібно переробляти.
carlspring

39

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

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


Дякую. Я просто хочу змішати pluginManagement і теги плагінів на одному файлі пам’яті, тому що мені потрібно обійти невелику помилку плагіна M2E для Eclipse. Дивіться stackoverflow.com/questions/8706017 / ...
Andrea Borgogelli Avveduti

3

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

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

Скопійовано з:

Maven2 - проблема з плагіномУправління та стосунки батько-дитина

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.