Подтвердить что ты не робот

Maven: включение папки META-INF в папку классов

У меня очень простой проект WAR, и я хочу включить каталог с именем META-INF в начало выходной папки классов, где все скомпилированные классы Java. Я использую Maven, но кажется, что по умолчанию Maven не будет включать ничего, что не является классом Java. Поэтому он игнорирует мою директорию META-INF, которая находится в верхней части каталога src. Каталог META-INF содержит файл с именем persistence.xml. Любые быстрые указатели на инструкции Maven поместить этот каталог и файл в папку вывода?

4b9b3361

Ответ 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>