2012-02-28 25 views
13

Estoy intentando hacer un maven parent pom setup donde no tenga que declarar ninguna información de complemento en mi pom hijo, todo está tomado del pom padre.Maven - Parent Pom - Child Herencia

Básicamente lo tengo trabajando donde he puesto todos mis complementos con sus configuraciones en el pom padre. Luego, en los poms de niños, tengo que declarar el complemento aún, pero sin la información de versión y configuración.

No quiero tener que declarar el complemento en el niño en absoluto. De esta forma puedo agregar nuevas funciones (como pmd, freebugs, etc.) a mi pom padre y todos mis proyectos ahora las tienen funcionando. ¿Cómo puedo lograr esto?

Padres Pom

<pluginManagement> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-scm-plugin</artifactId> 
      <version>1.0</version> 
      <inherited>true</inherited> 
      <configuration> 
       <providerImplementations> 
        <cvs>cvs_native</cvs> 
       </providerImplementations> 
       <systemProperties> 
        <property> 
         <name>maven.scm.perforce.clientspec.name</name> 
         <value>${perforceClientSpec}</value> 
        </property> 
       </systemProperties> 
      </configuration> 
     </plugin> 

Pom niño todavía necesita esto, pero yo no quiero tener que hacer esto si puedo evitarlo:

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

Respuesta

21

La sección <pluginManagement> está diseñada para configurar construcciones de proyectos que heredan de esta. Sin embargo, esto solo configura los complementos que son actualmente a los que se hace referencia en el elemento de complementos en los elementos secundarios (por lo tanto, debe especificarlos explícitamente, como indicó). Ver más here.

Si se quiere evitar esto, se puede poner esta información en la sección <build> así:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-scm-plugin</artifactId> 
     <version>1.0</version> 
     <configuration> 
     <...> 
     </configuration> 
     <executions> 
     <...> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 
+0

perfecto. Gracias a todos. – Bellini

+2

@Nishant explica además por qué funciona esto. Los plugins declarados fuera de '' son heredados por los POM secundarios, por defecto. Sus configuraciones pueden ser anuladas por cada niño si así lo desea. Los complementos declarados dentro de '' configuran configuraciones globales para todas las POM secundarias que están explícitamente configuradas para consumir esos complementos (como en el ejemplo original). Su configuración también puede ser anulada dentro de los POM secundarios. – hotshot309

11

En lugar de utilizar pluginManagement, tratar usando solo la etiqueta <plugins>. Debe ser auto heredado. Opcionalmente puede anular la configuración en child pom. Compruebe que por mvn help:effective-pom

+0

su triste del efectivo-pom no muestra por defecto del plugin de unión en fase –

1

No puede evitar nombrar el complemento en el pom hijo, porque ¿cómo debe saber maven qué complemento está utilizando? La sección pluginManagement está destinada a definir las versiones del complemento y, además, se utiliza para definir una configuración predeterminada.