java - tutorial - Maven: incluye una carpeta META-INF en la carpeta de clases
spring java tutorial (5)
Da la siguiente entrada en POM.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<!--webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory-->
<packagingExcludes>**/web.xml</packagingExcludes>
</configuration>
</plugin>
Tengo un proyecto WAR muy simple y quiero incluir un directorio llamado META-INF
en la parte superior de la carpeta de salida de clases donde están todas las clases compiladas de Java. Estoy usando Maven, pero parece que por defecto Maven no incluirá nada que no sea una clase Java. Por lo tanto, ignora mi directorio META-INF
que se encuentra en la parte superior del directorio src
. El directorio META-INF
contiene un archivo llamado persistence.xml
. ¿Alguna sugerencia rápida sobre cómo ordenarle a Maven que coloque este directorio y archivo en la carpeta de salida?
En general, para un proyecto Maven basado en Java, los archivos que no son de origen deben ir en el subdirectorio src/main/resources
del proyecto. Los contenidos de ese directorio de resources
se copian en el directorio de salida (por defecto, target/classes
) durante la fase de recursos de proceso de la compilación.
Para los proyectos WAR de Maven, es un poco más complicado: también existe el directorio src/main/webapp
, donde Maven espera encontrar WEB-INF/web.xml
. Para construir su archivo WAR, ese archivo debe existir; de lo contrario, verá un mensaje de error como este:
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
Dado que el directorio WEB-INF
debe existir en src/main/webapp
, recomendaría no volver a definirlo en src/main/resources
. Aunque esto es perfectamente válido y los contenidos de los dos directorios se fusionarán, puede confundirse si se define un archivo en ambos. Los contenidos de src/main/resources
tendrán prioridad ya que se copian sobre los contenidos de src/main/webapp
.
Pon esto en pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
Responderé indirectamente a tu pregunta diciendo que si ya has dado el salto a Maven2, definitivamente recomendaría usar el Archetype Plugin. Usar el arquetipo de aplicación web asegurará que termines con una estructura de directorios canónicos. Cualquiera que mire su fuente inmediatamente sabrá dónde está todo y no habrá dudas sobre dónde se encuentran sus archivos.