2009-08-19 14 views
38

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?Maven: incluye una carpeta META-INF en la carpeta de clases

+1

Muy buena pregunta, gracias. –

Respuesta

11

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

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

Para especificar directorios de recursos adicionales, consulte here.

4

Responderé indirectamente a su pregunta diciendo que si ya ha 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.

81

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. El contenido de ese directorio resources se copia en el directorio de salida (de manera predeterminada, 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 está 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) 

Como debe existir el directorio WEB-INF bajo src/main/webapp, recomendaría evitando definir de nuevo 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. El contenido de src/main/resources tendrá prioridad ya que se copian en la parte superior de los contenidos desde src/main/webapp.

+2

¡Te amo hombre! – willcodejavaforfood

+1

¡Tu publicación ha resuelto mi error! ¡Gracias! ¡Por ti! –

+0

Lo mismo hizo el mío, buen compañero de trabajo – myro

0

Dale la entrada a continuación 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> 
4

poner 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> 
+3

Deberías agregar un meta texto – keyser

Cuestiones relacionadas