2010-08-27 13 views
6

Estoy usando Maven 2 e Hibernate para una aplicación web Java.¿Por qué maven no empaqueta mi archivo de mapeo de hibernación?

Tengo un archivo de asignación de Hibernate, Domain.hbm.xml en la misma carpeta de origen con varias clases de dominio.

Si ejecuto mvn clean package me parece que este archivo no se copia en el archivo war en la carpeta de destino.

Sin embargo, si hago solo mvn clean y luego voy a eclipsar y selecciono Limpiar en el menú Proyecto, el archivo se envía al lugar apropiado en el destino. Luego puedo hacer mvn package para empacar con éxito un archivo war que tenga acceso a la base de datos.

¿Es una configuración pom para esto? ¿Que esta pasando?

+0

¿Estás seguro de que tu archivo xml está en la carpeta de recursos? – mhshams

Respuesta

9

Los recursos distintos de las fuentes Java que desee que terminen directamente en el classpath (en su caso, dentro/WEB-INF/classes) deben ir en su directorio src/main/resources, no src/main/java.

12

Si ejecuto el paquete mvn clean, me parece que este archivo no se copia en el archivo war de la carpeta de destino.

A continuación, los archivos de asignación no son, probablemente, en el directorio de recursos predeterminado (src/main/resources), pero en el directorio de origen (src/main/java) y Maven no va a copiar en el directorio de resultados de generación por defecto.

Sin embargo, si solo limpio mvn y luego voy a eclipsar y selecciono Limpiar en el menú Proyecto, el archivo se envía al lugar apropiado en el destino. Luego puedo hacer el paquete mvn para empaquetar exitosamente un archivo war que tenga acceso a la base de datos.

Bajo Eclipse, supongo que los archivos de los directorios de fuentes se copian en el directorio de salida de compilación, incluidos los archivos de recursos de la aplicación. Entonces, esto de alguna manera "engaña" a Maven cuando ejecuta package después del paso de limpieza de Eclipse. Pero esto realmente no importa, el maestro es Maven, todo lo demás es irrelevante.

Para solucionarlo, mueva sus archivos de asignación a src/main/resources. O mantenerlos en src/main/java y declarar el directorio de fuentes como un directorio de recursos "extra":

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

Algunas personas hacen esto, yo prefiero usar directorios separados.

0

Tuve el mismo problema. Esto resolvió mi problema.

<sourceDirectory>src/main/java</sourceDirectory> 
    <resources> 
     <resource> 
      <directory>src/main/java</directory> 
       <includes> 
        <include>**/*.xml</include> 
        <include>**/*.properties</include> 
       </includes> 
     </resource> 
    </resources> 
Cuestiones relacionadas