Выбор определенных файлов ресурсов в WAR из местоположения src/main/resources по умолчанию с помощью Maven
Я пытаюсь контролировать, какие файлы входят в пакет WAR, созданный mvn package
Цель. В частности, я хочу исключить некоторые файлы по умолчанию src/main/resources
папка для каждого пакета (я пытаюсь сделать builds/package для разных сред).
Я пытался использовать Maven-War-плагин, но не удалось. Если я добавлю эту конфигурацию (для тестирования):
<webResources>
<resource>
<directory>src/main/resources</directory>
<targetPath>WEB-INF/classes</targetPath>
<excludes>
<exclude>*.xml</exclude>
</excludes>
</resource>
</webResources>
... мой WEB-INF/classes
будет по-прежнему содержать файлы XML. Это потому что webResources
Параметр, кажется, дублирует процесс копирования (приведенная выше конфигурация фактически работает, файлы не копируются... но вместо этого они копируются в каком-то другом процессе).
Документация Maven-war-plugin гласит:
Каталог ресурсов по умолчанию для всех проектов Maven 2 - это src/main/resources, который в конечном итоге окажется в target/classes и в WEB-INF/classes в WAR. Структура каталога будет сохранена в процессе.
Плагин WAR также может включать ресурсы, не найденные в каталоге ресурсов по умолчанию, с помощью параметра webResources.
Это немного сбивает с толку. Означает ли это, что:
webResources
Параметр - это функция в плагине maven-war, позволяющая включать файлы только извнеsrc/main/resources
папка? Если так, как мы можем изменить скопированные файлы изнутриsrc/main/resources
?webResources
Параметр - это функция в maven-war-plugin, которая позволяет включать файлы и извнеsrc/main/resources
папка? Если так, как это может быть настроено для этого?- Какой-то другой вариант?
2 ответа
Я пытаюсь контролировать, какие файлы входят в пакет WAR, созданный целью пакета mvn. В частности, я хочу исключить некоторые файлы из папки src/main/resources по умолчанию для каждого пакета
Ресурсы из каталога ресурсов по умолчанию (src/main/resources
) копируются в выходной каталог сборки (target/classes
) в течение process-resources
фаза. Затем во времяpackage
фаза, содержаниеtarget/classes
берется и упаковывается в распределенный архив, такой как WAR, и заканчивается WEB-INF/classes
в таком случае.
Итак, если вы хотите контролировать, какие ресурсы в конечном итогеWEB-INF/classes
, вам нужно контролировать, какие ресурсы будут в конечном итогеtarget/classes
то есть как-то изменить поведение цели, связанной с process-resources
фаза, в частности, resources:resources
цель Maven Resources Plugin.
И для этого (это, вероятно, не интуитивно), вы можете объявить exclude
или же include
элементы внутри resources
элемент pom, как показано в разделе Включение и исключение файлов и каталогов. Применяется к каталогу ресурсов по умолчанию:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.xml</exclude>
</excludes>
</resource>
</resources>
</build>
И если вы хотите использовать собственные правила исключения для разных сред, объедините это с профилями. Например:
<project>
...
<profiles>
<profile>
<id>env-uat</id>
<activation>
<property>
<name>env</name>
<value>uat</value>
</property>
</activation>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.xml</exclude>
</excludes>
</resource>
</resources>
</build>
</profile>
</profiles>
</project>
И при использовании этого профиля XML-файлы не будут в конечном итоге в target/classes
и, следовательно, они не окажутся в WEB-INF/classes
в финальной войне.
Я пытался использовать Maven-War-плагин, но не удалось. Если я добавлю эту конфигурацию (для тестирования) (...), мои WEB-INF/ классы все равно будут содержать файлы XML
Здесь вы добавляете каталог дополнительных ресурсов, который выглядит как уже включенный каталог ресурсов по умолчанию. Итак, что бы вы ни исключали, это не имеет никакого эффекта, так как файлы копируются в target/classes
в течение process-resources
в любом случае, и, таким образом, по-прежнему в конечном итоге в WEB-INF/classes
,
Другими словами, используйте webResources
когда вы хотите добавить дополнительные ресурсы, которые не являются частью каталога ресурсов по умолчанию:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory -->
<directory>extra-resources</directory>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
Но я не думаю, что это то, что вы ищете здесь, и предлагаю использовать подход, предложенный выше.
См . Ответ Паскаля для правильной конфигурации и хорошего объяснения процесса. Я просто даю прямой ответ на этот вопрос здесь:
- Параметр webResources - это функция в maven-war-plugin, которая позволяет включать файлы только из папки src/main/resources? Если да, как мы можем изменить скопированные файлы из src/main/resources?
- Параметр webResources - это функция в maven-war-plugin, которая позволяет включать файлы также из папки src/main/resources? Если так, как это может быть настроено для этого?
Это первое, webResources
параметр в maven-war-plugin
позволяет только включать дополнительные ресурсы извне src/main/resources
, Это не позволяет настраивать включает / исключает для src/main/resources
сам.