Я использую Maven 2 и Hibernate для веб-приложения Java.
У меня есть файл отображения Hibernate, Domain.hbm.xml
в той же исходной папке с несколькими классами домена.
Если я запустил mvn clean package
, я обнаружил, что этот файл не копируется в файл war в целевой папке.
Однако, если я выполняю только mvn clean
, а затем перехожу в eclipse и выбираю «Очистить» в меню «Проект», файл отправляется в соответствующее место в целевой папке. Затем я могу выполнить mvn package
, чтобы успешно упаковать военный файл, имеющий доступ к базе данных.
Подходит ли для этого настройка pom? Что происходит?
Ресурсы, отличные от исходников Java, которые вы хотите разместить непосредственно в пути к классам (в вашем случае внутри /WEB-INF/classes), должны находиться в вашем каталоге src/main/resources, а не src/ основной/ява.
Если я запускаю mvn clean package, я обнаруживаю, что этот файл не копируется в файл войны в целевой папке.
Тогда файлы сопоставления, вероятно, находятся не в каталоге ресурсов по умолчанию (src/main/resources
), а в исходном каталоге (src/main/java
), и Maven победил. t копировать их в выходной каталог сборки по умолчанию.
Однако, если я сделаю только mvn clean, а затем перейду в eclipse и выберу Clean в меню Project, файл будет отправлен в соответствующее место в целевом объекте. Затем я могу сделать пакет mvn, чтобы успешно упаковать военный файл, который имеет доступ к базе данных.
Я предполагаю, что в Eclipse файлы из исходных каталогов копируются в выходной каталог сборки, включая файлы ресурсов приложения. Таким образом, это как-то «обманывает» Maven, когда вы запускаете package
после этапа очистки Eclipse. Но это не имеет большого значения, мастер — 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>
Некоторые люди делают это, я предпочитаю использовать отдельные каталоги.