2009-10-06 17 views
5

Tengo un proyecto multi-módulo y me gustaría definir un archivo de filtro único que va a aplicar las propiedades a todos los módulos del niño. Por ejemplo, me gustaría tener la siguiente estructura:cómo compartir un archivo de filtro entre los módulos maven2?

padre
- filter.properties
- modulo1
    - Resource1
- modulo2
    - resource2

tal que cuando Bu ild parent, aplicaría el filtro a resource1 y resource2 cuando se crean los módulos secundarios.

Si creo la estructura anterior y defino el filtro en el POM del padre, la compilación falla porque espera que el filtro se defina en cada módulo secundario ... ¿Hay una manera simple de hacer esto que estoy pasando por alto? ?

Respuesta

4

This answer describe cómo extender las propiedades-maven-plugin para permitir que los archivos de propiedades para ser compartidos entre los proyectos. Si usa ese complemento, las propiedades se pondrán a disposición de la compilación y, por lo tanto, se pueden usar al filtrar los recursos.

Como alternativa, puede especificar un archivo de filtro como artefacto adjunto en alguna compilación, para que esté disponible en el repositorio, luego use el complemento de dependencia para descargar el archivo de filtro y especifique finalmente que el filtro use el archivo compartido.

colocar el filtro a su generación de primario, utilice las build-helper-maven-plugin 's se unen objetivo:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
     <id>attach-artifacts</id> 
     <phase>package</phase> 
     <goals> 
      <goal>attach-artifact</goal> 
     </goals> 
     <configuration> 
      <artifacts> 
      <artifact> 
       <file>src/main/resources/shared-filter.properties</file> 
       <type>properties</type> 
       <classifier>filter</classifier> 
      </artifact> 
      </artifacts> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Cuando se implementa el proyecto que aloja el filtro, el filtro ahora se une junto a él.

Para descargar el archivo de filtro en su proyecto, utilice copia dependencias objetivo del maven-dependency-plugin 's para descargar el archivo:

<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>copy</id> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>copy</goal> 
     </goals> 
     <configuration> 
      <artifactItems> 
      <artifactItem> 
       <groupId>name.seller.rich</groupId> 
       <artifactId>shared</artifactId> 
       <version>1.0.0</version> 
       <classifier>filter</classifier> 
       <type>properties</type> 
       <overWrite>false</overWrite> 
       <destFileName>shared-filter.properties</destFileName> 
      </artifactItem> 
      </artifactItems> 
      <outputDirectory> 
      ${project.build.directory}/filters 
      </outputDirectory> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Si la configuración de la dependencia plugin se define en su proyecto principal, todos los demás proyectos pueden hereda la configuración y no será necesario redefinirla.

Luego de usar el filtro descargado:

<filters> 
    <filter>${project.build.directory}/filters/shared-filter.properties</filter> 
</filters> 
<resources> 
    <resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
    </resource> 
</resources> 
+0

+1 Buena respuesta Rica. ¿Alguna vez escuchó sobre esto: http://www.mail-archive.com/[email protected]/msg00202.html? –

+0

Gracias Rich, eso debería funcionar para mí. No es tan simple como esperaba aunque :) – David

+0

He intentado con la solución anterior, funciona parcialmente. cuando intento instalar mvn, copia los recursos pero al final también intenta desplegarlos en el repositorio y durante ese tiempo busca el recurso en src/main/resource del submódulo y obtengo la siguiente excepción – user373201

4

No sé si esto es una opción, pero, en lugar de definir las propiedades de un archivo externo, también se puede definir en la sección de propiedades de su pom.xml y se obtendría el mismo efecto:

<project> 
    ... 
    <properties> 
    <my.filter.value>hello</my.filter.value> 
    </properties> 
</project> 

por lo tanto, la definición de <properties> en el pom padres deben permitirá filtrar módulos niño fácilmente.

+0

+1 para el enfoque simple –

0

también puede compartir el filtro utilizando una ruta absoluta para el filtro en su pom.xml padres

Dado que la ruta depende del entorno (eclipse Windows/Linux Eclipse/buildserver) se puede poner el prefijo de ruta o parte de ella en la configuración.perfil xml

Cuestiones relacionadas