O que é pluginManagement no pom.xml do Maven?

266

Este é um trecho do meu arquivo 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>
...

Eu uso com sucesso com o comando

mvn install

Mas, quando tento incluí-lo na tag "pluginManagement", ele maven-dependency-pluginpára de funcionar quando inicio o installobjetivo. Por que a tag "pluginManagement" altera o comportamento da compilação? Ou devo usar outro objetivo ou opção?

Andrea Borgogelli Avveduti
fonte

Respostas:

299

Você ainda precisa adicionar

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

na sua compilação, porque pluginManagementé apenas uma maneira de compartilhar a mesma configuração de plug-in em todos os módulos do seu projeto.

Da documentação do Maven:

pluginManagement : é um elemento que é visto ao longo dos plugins laterais. O Gerenciamento de plug-ins contém elementos do plug-in da mesma maneira, exceto que, em vez de configurar as informações do plug-in para essa compilação de projeto específica, pretende-se configurar as compilações de projeto herdadas dessa. No entanto, isso apenas configura plug-ins que são realmente referenciados no elemento plug-in nos filhos. As crianças têm todo o direito de substituir as definições de pluginManagement.

jordeu
fonte
266

A diferença entre <pluginManagement/>e <plugins/>é que um <plugin/>sub:

  • <pluginManagement/>define as configurações dos plugins que serão herdados pelos módulos em sua compilação. Isso é ótimo para casos em que você tem um arquivo pom pai.

  • <plugins/>é uma chamada real do plug-in. Pode ou não ser herdado de a <pluginManagement/>.

Você não precisa ter um <pluginManagement/>em seu projeto, se não for um POM pai. No entanto, se for um pom pai, então no pom da criança, você precisa ter uma declaração como:

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

Observe como você não está definindo nenhuma configuração. Você pode herdá-lo do pai, a menos que precise ajustar ainda mais sua chamada de acordo com as necessidades do projeto filho.

Para informações mais específicas, você pode verificar:

carlspring
fonte
Obrigado por sua resposta. Preciso misturar a tag pluginManagement e plugin (para o maven-dependency-plugin) no mesmo arquivo pom, porque preciso ignorar um pequeno bug do plugin M2E Eclipse IDE. Veja stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti
7
Obrigado! :) É o mesmo para <dependency/>e <dependencyManagement/>. Você define as dependências (junto com suas versões e escopos, se desejar) na <dependencyManagement/>seção e, na <dependencies/>seção, apenas define o groupIde artifactId.
carlspring 28/09/12
1
se eu tiver que executar um plugin duas vezes, devo usar o pluginmanagement?
Kalpesh Soni
@ KalpeshSoni: Depende - você pode querer ter uma configuração comum entre as duas execuções que não deseja redefinir.
carlspring
39

Você usa pluginManagement em um parent pompara configurá-lo no caso de qualquer child pomquer usá-lo, mas não todos os plug-in criança quer usá-lo. Um exemplo pode ser que você super pomdefine algumas opções para o plugin Javadoc maven.

Nem todos child pompodem querer usar o Javadoc, portanto, você define esses padrões em uma pluginManagementseção. O pom filho que deseja usar o plug-in Javadoc, apenas define uma seção de plug-in e herdará a configuração da pluginManagementdefinição no parent pom.

Wim Deblauwe
fonte
Obrigado. Eu só estou olhando para misturar tags pluginManagement e plugin no mesmo arquivo pom, porque eu preciso ignorar um pequeno bug do plugin M2E para Eclipse. Veja o stackoverflow.com/questions/8706017/…
Andrea Borgogelli Avveduti
3

pluginManagement: é um elemento que é visto ao longo dos plugins laterais. O Gerenciamento de plug-ins contém elementos do plug-in da mesma maneira, exceto que, em vez de configurar as informações do plug-in para essa compilação de projeto específica, pretende-se configurar as compilações de projeto herdadas dessa. No entanto, isso apenas configura plug-ins que são realmente referenciados no elemento plug-in nos filhos. As crianças têm todo o direito de substituir as definições de pluginManagement.

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

Copiado de:

Maven2 - problema com o pluginManagement e relacionamento pai-filho

formiga
fonte