Pergunta

É possível ter um plugin definido no POM pai que está desativado, e quando a criança herda este plugin que é ativado automaticamente?

Foi útil?

Solução

Eu acho que você deseja configurar o plugin no seu pom pai, mas usá-lo apenas nos projetos herdados. Maven tem uma seção para isso - configurar seus plugins em pluginManagement, mas ligá-los a uma fase apenas quando necessário, por exemplo, omitir a tag fase na pluginManagement, mas especificá-lo sob em você herdou pom.

Outras dicas

Assim 'siddhadev' é exatamente correto. Você pode definir a configuração do plugin no POM pai com um determinado id:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>child-caller</id>
                        <!-- 'phase' omitted -->
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <echo message="called from child!" />
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

E, no POM criança, você pode listar explicitamente a fase em que este deve ser chamado:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>child-caller</id>
                    <phase>compile</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Eu usei isso para alvejar vários JREs. Infelizmente, porque você não pode usar o maven-compiler-plugin com diferentes diretórios de destino (que eu considero um erro no plugin), você deve usar Ant.

Isto não é exatamente o que você está depois, mas acho que ele vai trabalhar bem o suficiente para você.

Se você declarar o plugin em uma tag pluginManagement no pai, a configuração será herdada por quaisquer projetos filho que declaram que plugin.

Por exemplo, na declarar pai que o plugin compilação usa Java 5 para a compilação de teste.

<pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <executions>
        <execution>
          <id>test-compile</id>
          <goals>
            <goal>testCompile</goal>
          </goals>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</pluginManagement>

Então, em uma criança, você simples declarar o plugin compilador e da configuração do pai será herdada:

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

Você pode declarar um plugin no pom nível superior e diga a ele para ser ignorada e, em seguida, dizer que não deve ser ignorada no nível filho. Não é bem automática, mas muito mínima na verbosidade substituição.

Pais Pom, desativando o plugin, mas declarando todo o config:

<plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-surefire-plugin</artifactid>
    <configuration>
        <skip>true</skip>
        ...lots more config...
        ...lots more config...
        ...lots more config...
    </configuration>
</plugin>

Criança Pom, permitindo que o plugin:

<plugin>
    <groupid>org.apache.maven.plugins</groupid>
    <artifactid>maven-surefire-plugin</artifactid>
    <configuration>
        <skip>false</skip>
    </configuration>
</plugin>

Eu fui com a seguinte solução:

  • Configurar o plugin no pai-pom na pluginManagement-seção. Bind o plugin a uma fase existente.

  • Desactivar o plug-in para o pai-pom ligando-os a uma fase inexistente:. Substituir a fase no plug-ins de secção

  • ativar o plugin em cada criança-pom, incluindo o plugin na seção plugins.

Exemplo pai-pom:

<defaultGoal>install</defaultGoal>
    <pluginManagement>
        <plugins>
            ...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <executions>
                    <execution>
                        <id>install-ejb-client</id>
                        <phase>install</phase>
                        <goals>
                        <goal>install-file</goal>
                        </goals>
                        <configuration>
                            <file>${ejb-client-file}</file>
                            <groupId>${project.groupId}</groupId>
                            <artifactId>${project.artifactId}</artifactId>
                            <version>${project.version}</version>
                            <packaging>jar</packaging>
                            <classifier>client</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
                    ...                 
        </plugins>
    </pluginManagement>
    <plugins>
            <plugin>
                <!-- deactivate the plugin for this project, only child-projects do generate ejb-clients -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <inherited>false</inherited>
                <executions>
                    <execution>
                        <id>install-ejb-client</id>
                        <phase>none</phase>
                    </execution>
                </executions>
            </plugin>
            ...
    </plugins>
</build>

Exemplo criança-pom:

<build>
    <plugins>
            ...
        <plugin>
            <!-- Install the generated client-jar. Property 'ejb-client-file' has to be set! Plugin configuration is in the parent pom -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
        </plugin>       
            ... 
    </plugins>
</build>

Tanto quanto eu sei, não há nenhuma solução genérica para este. Pelo menos por enquanto ...

Uma idéia (eu não tentar, mas pode funcionar) é definir, no pom.xml pai uma meta de execução que não existe, por exemplo:

<executions>
    <execution>
        <goals>
            <goal>noGoal</goal>
        </goals>
    </execution>
</executions>

e em cada criança, você redefinir um objetivo correto.

O problema desta solução (se ele funciona, é claro;)) é que você deve redefinir a configuração do plugin para cada criança. Caso contrário, não será executada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top