У меня очень простой проект WAR, и я хочу включить каталог с именем META-INF
в начало выходной папки классов, где все скомпилированные классы Java.
Я использую Maven, но кажется, что по умолчанию Maven не будет включать ничего, что не является классом Java. Поэтому он игнорирует мою директорию META-INF
, которая находится в верхней части каталога src
.
Каталог META-INF
содержит файл с именем persistence.xml
. Любые быстрые указатели на инструкции Maven поместить этот каталог и файл в папку вывода?
Maven: включение папки META-INF в папку классов
Ответ 1
В общем, для Java-проекта Maven файлы с исходными файлами должны находиться в подкаталоге src/main/resources
проекта. Содержимое этого каталога resources
копируется в выходной каталог (по умолчанию, target/classes
) на этапе процесса-ресурсов сборки.
Для проектов Maven WAR это несколько сложнее: есть также каталог src/main/webapp
, в котором Maven ожидает найти WEB-INF/web.xml
. Чтобы создать WAR файл, этот файл должен существовать; в противном случае вы увидите сообщение об ошибке следующего вида:
[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)
Поскольку каталог WEB-INF
должен существовать под src/main/webapp
, я бы рекомендовал не определять его снова в src/main/resources
. Хотя это совершенно верно и содержимое двух каталогов будет объединено, может возникнуть путаница, если файл определен в обоих. Содержимое src/main/resources
будет иметь приоритет, поскольку они копируются поверх содержимого из src/main/webapp
.
Ответ 2
Maven хочет этот тип информации в папке ресурсов. См. здесь для получения дополнительной информации.
Project
|-- pom.xml
`-- src
`-- main
|-- java
`-- resources
Для указания дополнительных каталогов ресурсов см. здесь.
Ответ 3
Поместите это в 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>
Ответ 4
Я косвенно отвечу на ваш вопрос, сказав, что если вы уже совершили переход к Maven2, я бы определенно рекомендовал использовать Archetype Plugin. Использование архетипа webapp гарантирует, что вы получите каноническую структуру каталогов. Любой, кто смотрит на ваш источник, сразу узнает, где все, и не будет никаких вопросов относительно того, куда идут ваши файлы.
Ответ 5
Введите следующую запись в 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>