uso tutorial programaciĆ³n mvc framework espaƱol ejemplos edicion cuarta books arquitectura accion java web-applications maven-2 java-ee maven-plugin

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 .


Maven quiere este tipo de información en la carpeta de recursos. Mira here para más información.

Project |-- pom.xml `-- src `-- main |-- java `-- resources

Para especificar directorios de recursos adicionales, mira here .


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.