Co to jest pluginManagement w pom.xml Maven?

266

To jest fragment mojego pliku 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>
...

Używam go z powodzeniem z poleceniem

mvn install

Ale kiedy próbuję zawrzeć go w tagu „pluginManagement”, maven-dependency-pluginprzestaje działać, kiedy uruchamiam installcel. Dlaczego znacznik „pluginManagement” zmienia zachowanie kompilacji? Czy powinienem użyć innego celu lub opcji?

Andrea Borgogelli Avveduti
źródło

Odpowiedzi:

299

Nadal musisz dodać

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

w twojej kompilacji, ponieważ pluginManagementjest to tylko sposób na udostępnienie tej samej konfiguracji wtyczek we wszystkich modułach projektu.

Z dokumentacji Maven:

pluginManagement : jest elementem widocznym obok bocznych wtyczek. Zarządzanie wtyczkami zawiera elementy wtyczek w bardzo podobny sposób, z tym wyjątkiem, że zamiast konfigurowania informacji o wtyczkach dla tej konkretnej kompilacji projektu, należy skonfigurować kompilacje projektu, które dziedziczą po tej. Jednak konfiguruje to tylko wtyczki, do których istnieją odwołania w elemencie wtyczek w elementach potomnych. Dzieci mają pełne prawo do zastępowania definicji pluginManagement.

jordeu
źródło
266

Różnica między <pluginManagement/>i <plugins/>polega na tym, że <plugin/>poniżej:

  • <pluginManagement/>określa ustawienia wtyczek, które zostaną odziedziczone przez moduły w twojej kompilacji. Jest to świetne w przypadkach, gdy masz nadrzędny plik pom.

  • <plugins/>jest faktycznym wywołaniem wtyczki. Może, ale nie musi być dziedziczony z <pluginManagement/>.

Nie musisz mieć <pluginManagement/>w swoim projekcie, jeśli nie jest to nadrzędna POM. Jednak jeśli jest to pom pom, to w pom pom dziecka musisz mieć deklarację:

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

Zauważ, że nie definiujesz żadnej konfiguracji. Możesz odziedziczyć go od rodzica, chyba że będziesz musiał dalej dostosowywać swoje wywołanie zgodnie z potrzebami projektu potomnego.

Aby uzyskać bardziej szczegółowe informacje, możesz sprawdzić:

carlspring
źródło
Dziękuję za odpowiedź. Muszę wymieszać tag pluginManagement i plugin (dla wtyczki zależnej od maven) w tym samym pliku pom, ponieważ muszę ominąć mały błąd wtyczki M2E Eclipse IDE. Zobacz stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti
7
Dzięki! :) To samo dotyczy <dependency/>i <dependencyManagement/>. Zależności (wraz z ich wersjami i zakresami, jeśli chcesz) definiujesz w <dependencyManagement/>sekcji, a następnie w <dependencies/>sekcji, którą właśnie definiujesz groupIdi artifactId.
Carlspring,
1
jeśli muszę dwukrotnie wykonać wtyczkę, czy powinienem używać zarządzania wtyczkami?
Kalpesh Soni
@KalpeshSoni: To zależy - możesz chcieć mieć wspólną konfigurację między dwoma wykonaniami, których nie chcesz redefiniować.
Carlspring
39

Używasz pluginManagementgo, parent pomaby skonfigurować go na wypadek, gdyby ktoś child pomchciał go użyć, ale nie każda wtyczka potomna chce go użyć. Przykładem może być super pomzdefiniowanie niektórych opcji dla wtyczki Javavoc maven.

Nie każdy child pommoże chcieć używać Javadoc, więc zdefiniuj te wartości domyślne w pluginManagementsekcji. Dziecko pom, które chce korzystać z wtyczki Javadoc, po prostu definiuje sekcję wtyczek i odziedziczy konfigurację z pluginManagementdefinicji w pliku parent pom.

Wim Deblauwe
źródło
Dziękuję Ci. Chcę tylko połączyć pluginManagement i tagi wtyczek w tym samym pliku pom, ponieważ muszę ominąć mały błąd wtyczki M2E dla Eclipse. Zobacz stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti
3

pluginManagement: jest elementem widocznym obok bocznych wtyczek. Zarządzanie wtyczkami zawiera elementy wtyczek w bardzo podobny sposób, z tym wyjątkiem, że zamiast konfigurowania informacji o wtyczkach dla tej konkretnej kompilacji projektu, należy skonfigurować kompilacje projektu, które dziedziczą po tej. Jednak konfiguruje to tylko wtyczki, do których istnieją odwołania w elemencie wtyczek w elementach potomnych. Dzieci mają pełne prawo do zastępowania definicji pluginManagement.

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

Skopiowano z:

Maven2 - problem z pluginManagement i relacją rodzic-dziecko

Mrówka
źródło