2009-01-30 12 views

Respuesta

10

supongo que desea configurar el plugin en su pom padres , pero úsala solo en los proyectos heredados. Maven tiene una sección para esto: configure sus complementos en pluginManagement, pero agréguelos a una fase justo cuando lo necesite, p. omita la etiqueta de fase en pluginManagement, pero especifíquelo en heredado pom.

+1

¿Cómo es esto mejor que la respuesta de Rich Steller (http://stackoverflow.com/questions/495314/automatically-activate-parent-plugin-in-maven/1209728#1209728)? ¿Qué beneficio tiene este enfoque con solo usar la sección de administración de complementos? –

+0

@JimHurne Si desea elegir las ejecuciones, debe especificar la fase en el pom hijo, si desea hacerlo siempre, debe especificar la fase en el elemento primario. –

1

Por lo que sé, no hay una solución genérica para esto. Al menos por el momento ...

Una idea (que no lo probamos, pero puede trabajar) es definir, en el pom.xml padres un objetivo de ejecución que no existe, por ejemplo:

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

y en cada niño, redefinir un objetivo correcto.

El problema de esta solución (si funciona, por supuesto;)) es que debe redefinir la configuración del complemento para cada niño. De lo contrario, no se ejecutará.

+0

sí pensé en algo similar, pero como bien dice el reducir el tamaño de este enfoque es que tengo para configurar esto en cada niño que no quiero hacer. – kukudas

4

Puede declarar un complemento en el pom del nivel superior y decir que se omita y luego decirle que no se omita en el nivel secundario. No es completamente automático, pero es muy minimalista en la anulación de la verbosidad.

Padres Pom, deshabilitar el plugin, pero declarando todo el 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> 

Pom Niño, lo que permite el plugin:

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

Desafortunadamente, esto solo funciona si el plugin respectivo ofrece "omisión" como configuración. ¡No todos los complementos lo hacen! – jbandi

6

Esto no es exactamente lo que buscas, pero creo que funcionará lo suficientemente bien para ti.

Si declara el complemento en una etiqueta de pluginManagement en el elemento primario, la configuración será heredada por cualquier proyecto secundario que declare ese complemento.

Por ejemplo, en el padre declara que el complemento de compilación utiliza Java 5 para la compilación de prueba.

<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> 

Luego, en un niño, que declaran el plugin sencillo compilador y la configuración de los padres serán heredados:

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

Así 'siddhadev' es exactamente correcto. Se puede definir la configuración del plugin en el pom padre con un identificador dado:

<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> 

Y, en el niño POM, se puede enumerar explícitamente la fase en la que esta se debe llamar:

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

I' he usado esto para apuntar a varios JRE. Desafortunadamente, como no puede usar el compilador maven-compiler con diferentes directorios de destino (que considero un error en el complemento), debe usar Ant.

4

Fui con la siguiente solución:

  • configuración de la extensión en la relación padre-pom en la sección pluginManagement. Enlace el complemento a una fase existente.

  • Desactive el complemento para parent-pom vinculándolo a una fase inexistente: anule la fase en la sección de complementos.

  • Active el complemento en cada pom de niño incluyendo el complemento en la sección de complementos.

Ejemplo padres-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> 

Ejemplo niño-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> 
Cuestiones relacionadas