2010-09-20 21 views
38

Probé this para excluir todo el directorio ($ {basedir}/src/main/webapp/webscripts) de mi archivo WAR pero falló. ¿Qué está mal?maven2: excluyendo el directorio de WAR

esto no funciona:

<configuration> 
    <webResources> 
     <resource> 
     <directory>${basedir}/src/main/webapp/webscripts</directory> 
     <excludes> 
     <exclude>**/*.*</exclude> 
     </excludes> 
     </resource> 
    </webResources> 
</configuration> 

esto también:

<configuration> 
    <webResources> 
     <resource> 
     <directory>${basedir}/src/main/webapp</directory> 
     <excludes> 
     <exclude>**/webscripts</exclude> 
     </excludes> 
     </resource> 
    </webResources> 
</configuration> 

¿Alguien puede ayudar?

+0

sólo hay que mover a una ubicación diferente. ¿Por qué los webscripts están bajo webapp? – khmarbaise

Respuesta

77

Ambas soluciones no serían útiles, ya que agregarían un recurso adicional que luego se desactivará. La carpeta de origen de la aplicación web se copia de manera predeterminada, sin el mecanismo de recursos.

El mecanismo para desactivar una parte de que es a través del parámetro <warSourceExcludes>, como este:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
     <warSourceExcludes>webscripts/**</warSourceExcludes> 
    </configuration> 
</plugin> 
+15

Solo una adición, si quisiera excluir varias carpetas agréguelas después de una coma, no use varios warSourceExcludes, no funcionaría –

+0

cómo excluir múltiples directorios. –

6

En la versión 2.1-alfa-1, esto fue warSourceExcludes incorrectamente con nombre. El parámetro de la derecha es packagingExcludes

Ejemplo de uso (excluye WEB-INF estática/carpeta/de la guerra):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
     <warName>searchservice-web</warName> 
     <packagingExcludes>WEB-INF/statics/</packagingExcludes> 
    </configuration> 
</plugin> 
+2

Esto es incorrecto y me engañó por un tiempo. Estoy usando la versión 2.1.1, pero packagingExcludes no funciona, mientras que warSourceExcludes sí. Parece que en las versiones más nuevas el paqueteExcludes es la etiqueta correcta para usar. – Noremac

29

warSourceExcludes no parece haber sido sólo a llamarse packagingExcludes.

warSourceExcludes: La lista separada por comas de fichas para excluir al copiar el contenido de la warSourceDirectory.

packagingExcludes: La lista de tokens separados por comas para excluir del WAR antes del empaquetado. Esta opción se puede usar para implementar el caso de uso de WAR flaco.

Hay una gran diferencia: Con packagingExcludes, las fichas están completamente excluidos del archivo de la guerra final. Con warSourceExcludes, los tokens simplemente se ignoran al copiar el directorio war en el archivo war. Como resultado, si los símbolos están presentes en la webappDirectory por ejemplo, no van a ser ignorado cuando se utiliza warSourceExcludes pero será cuando se utiliza packagingExcludes.

Y un ejemplo de sintaxis de trabajo:

<warSourceExcludes>**/${project.artifactId}/**</warSourceExcludes> 
+0

¿Qué quiere decir con "ignorado al copiar" ??? Si no se copian en el archivo war, no se empaquetan en el archivo war, y es lo mismo que packagingExcludes. ¿Puedes explicarlo más claramente? – kolobok

+0

packagingExcludes no se copia a la guerra final, mientras que warSourceExcludes no se copia en warDirectory que se comprimirá en una guerra. – Frohlich

1

Tenía un escenario en el que he tenido que excluir dos carpetas que podría ser igualadas por *scripts y estaban en la carpeta de recursos. La primera confusión fue si proporcionar el valor de exclusión como src/main/resources/*scripts o como WEB-INF/classes/*scripts, es decir, estructura de compilación previa o posterior.

Era muy importante proporcionar /** para excluir todo el directorio del archivo war. En mi caso, *scripts/**.

Aquí es la configuración final que trabajaron:

<packagingExcludes>WEB-INF/classes/*scripts/**</packagingExcludes> 
Cuestiones relacionadas