Почему maven не упаковывает мой файл hibernate-mapping?

Я использую Maven 2 и Hibernate для веб-приложения Java.

у меня есть файл Hibernate-mapping,Domain.hbm.xml в одной исходной папке с несколькими классами домена.

если я запускаю mvn clean package Я обнаружил, что этот файл не копируется в файл war в целевой папке.

однако, если я только mvn clean а затем перейдите в eclipse и выберите Очистить из меню проекта, файл отправляется в соответствующее место в целевом объекте. Тогда я смогу сделать mvn package успешно пакет war-файл, который имеет доступ к базе данных.

является ли настройка pom для этого? Что происходит?

3 ответов


ресурсы, отличные от источников Java, которые вы хотите получить на пути к классам напрямую (в вашем случае внутри /WEB-INF/classes), должны идти в каталог src/main/resources, а не src/main/java.


если я запускаю mvn clean package, я обнаруживаю, что этот файл не копируется в файл war в целевой папке.

тогда файлы сопоставления, вероятно, не находятся в каталоге ресурсов по умолчанию (src/main/resources), но в исходном каталоге (src/main/java) и Maven не будет копировать их в выходной каталог сборки по умолчанию.

однако, если я делаю только mvn clean, а затем иду в eclipse и выбираю Clean из меню проекта, файл отправляется в подходящее место в мишени. Затем я могу сделать пакет mvn, чтобы успешно упаковать файл war, который имеет доступ к базе данных.

в Eclipse я предполагаю, что файлы из исходных каталогов копируются в выходной каталог сборки, включая файлы ресурсов приложения. Так что это как-то" трюк " Maven при запуске package после шага Eclipse clean. Но это не имеет значения, мастер-Maven, все остальное не имеет значения.

чтобы исправить это, либо переместите файлы сопоставления в src/main/resources. Или держать их в src/main/java и объявите каталог источников как" дополнительный " каталог ресурсов:

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

некоторые люди делают это, я предпочитаю использовать отдельные каталоги.


У меня была та же проблема. Это решило мою проблему.

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