2010-08-24 25 views
7

Estoy intentando controlar qué archivos forman el paquete WAR que se crea con el objetivo mvn package. Específicamente, quiero excluir algunos archivos de la carpeta predeterminada src/main/resources para cada paquete (estoy intentando hacer compilaciones/paquetes para diferentes entornos).Seleccionar ciertos archivos de recursos en WAR desde la ubicación predeterminada de src/main/resources con Maven

He intentado usar maven-war-plugin pero ha fallado. Si añado esta configuración (para la prueba):

<webResources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <targetPath>WEB-INF/classes</targetPath> 
     <excludes> 
      <exclude>*.xml</exclude> 
     </excludes> 
    </resource> 
</webResources> 

... mis WEB-INF/classes seguirá conteniendo los archivos XML. Esto se debe a que el parámetro webResources parece duplicar el proceso de copiado (la configuración anterior funciona, los archivos no se copian ... pero se copian en algún otro proceso , excepto).

Maven-war-plugin documentation estados:

El directorio de recursos por defecto para todos los 2 proyectos Maven es src/main/resources, que terminarán en target/classes y en WEB-INF/classes en la guerra. La estructura del directorio se conservará en el proceso.

El complemento WAR también puede incluir recursos que no se encuentran en el directorio de recursos predeterminado a través del parámetro webResources.

Esto es un poco confuso. ¿Quiere decir que:

  • webResources El parámetro es una función de experto-guerra-plugin que permite que los archivos que se incluirán solamente desde fuera src/main/resources carpeta? Si es así, ¿cómo podemos alterar los archivos copiados desde el interior de src/main/resources?
  • El parámetro webResources es una característica de maven-war-plugin que permite incluir archivos también desde afuera de la carpeta src/main/resources? Si es así, ¿cómo se puede configurar para hacer esto?
  • ¿Alguna otra opción?
+0

¿Está intentando construir para diferentes entornos con el mismo paquete mvn o lo controla utilizando perfiles? – khmarbaise

+0

Sí, estoy usando perfiles. –

Respuesta

11

Estoy tratando de controlar los archivos hacen en el paquete WAR que se crea por objetivo mvn package. En concreto, quiero excluir algunos archivos de la carpeta/recursos por defecto src/main para cada paquete

recursos del directorio de recursos por defecto (src/main/resources) se copian en el directorio de salida de construcción (target/classes) durante la fase de process-resources. Luego, durante la fase package, el contenido de target/classes se toma y se empaqueta en un archivo distribuido, como WAR, y termina en WEB-INF/classes en ese caso.

lo tanto, si usted quiere controlar lo que terminan recursos en WEB-INF/classes, es necesario controlar qué recursos va a terminar en target/classes es decir para alterar de alguna manera el comportamiento de the goal bound to the process-resources phase, específicamente el objetivo de la resources:resourcesMaven Resources Plugin.

Y para ello, (esto probablemente no es intuitiva), se puede declarar exclude o include elementos dentro resources elemento del pom, como se muestra en Including and excluding files and directories. Aplicado al directorio de recursos predeterminado:

<build> 
    <resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <excludes> 
     <exclude>**/*.xml</exclude> 
     </excludes> 
    </resource> 
    </resources> 
</build> 

Y si usted quiere hacer las reglas de exclusión uso personalizados para diferentes entornos, combinar esto con profiles. Por ejemplo:

<project> 
    ... 
    <profiles> 
    <profile> 
     <id>env-uat</id> 
     <activation> 
     <property> 
      <name>env</name> 
      <value>uat</value> 
     </property> 
     </activation> 
     <build> 
     <resources> 
      <resource> 
      <directory>src/main/resources</directory> 
      <excludes> 
       <exclude>**/*.xml</exclude> 
      </excludes> 
      </resource> 
     </resources> 
     </build> 
    </profile> 
    </profiles> 
</project> 

Y cuando se utiliza este perfil, los archivos XML no va a terminar en target/classes y por lo tanto no va a terminar en WEB-INF/classes en la guerra final.

He intentado usar maven-war-plugin pero ha fallado. Si añado esta configuración (para la prueba) (...) mis WEB-INF/classes todavía contendrán los archivos XML

Lo que estamos haciendo aquí es la adición de un directorio recursos adicionales, lo que parece ser el directorio de recursos predeterminado ya incluido. Por lo tanto, sea lo que sea que excluya, esto no tiene ningún efecto ya que los archivos se copian en target/classes durante process-resources de todos modos y por lo tanto todavía terminan en WEB-INF/classes.

En otras palabras, utilice webResources cuando se desea añadir recursos adicionales que no son parte del directorio de recursos por defecto:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.1</version> 
     <configuration> 
      <webResources> 
      <resource> 
       <!-- this is relative to the pom.xml directory --> 
       <directory>extra-resources</directory> 
      </resource> 
      </webResources> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

Pero no creo que esto es lo que está buscando aquí y sugiera usar el enfoque sugerido anteriormente.

+0

Intenté excluir archivos en el elemento 'global'' resources'. El resultado fue que los archivos excluidos no entraron en 'target/classes', sin embargo, todavía entraron en' target/mypackage-1.0.0-SNAPSHOT'. Pero voy a comprobar esto de nuevo solo para asegurarme, tal vez hice algún error tipográfico/error allí:/ –

+0

@Tuukka Hmm ... Sí, por favor, comprueben (con una compilación limpia). –

+0

@ Pascal: después de volver a intentarlo de esa manera, parece estar funcionando. Tal vez cometí un error antes, estoy un poco confundido sobre el proceso completo:/Así que su sugerencia es definitivamente la correcta. Todavía tengo un problema para obtener 'Compilation failure' debido a' illegal start of expression' porque Maven no "reconoce" las anotaciones que uso en las pruebas. Sin embargo, esto parece un problema común de Maven y no está relacionado con la exclusión de archivos de ninguna manera. Trataré de resolverlo a continuación :) ¡Gracias por su apoyo! –

0

Ver Pascal's answer for right configuration and good explanation of the process. Acabo de dar una respuesta directa a esta pregunta aquí:

  • El parámetro webResources es una característica de maven-guerra-plugin que permite que los archivos que se incluirán solamente de carpeta fuera src/main/resources? Si es así, ¿cómo podemos alterar los archivos copiados desde adentro de src/main/resources?
  • El parámetro webResources es una característica de maven-war-plugin que permite incluir archivos también desde fuera de la carpeta src/main/resources? Si es así, ¿cómo se puede configurar para hacer esto?

Es el primer caso, el parámetro webResources en maven-war-plugin sólo se le permite a uno incluyen recursos adicionales desde fuera src/main/resources. Es no permiten configurar uno incluye/excluye para src/main/resources sí mismo.

Cuestiones relacionadas