В Maven как исключить ресурсы из сгенерированного jar?
когда я создаю исполняемый jar с зависимостями (используя это руководство), все файлы свойств также упаковываются в этот jar. Как это остановить? Спасибо.
обновление: я пытался исключить их с помощью плагин Maven resources, но тогда мое приложение не найдет файлы свойств, когда я запускаю его в Eclipse (щелкните правой кнопкой мыши на модуле -> Run As -> Java Application)
обновление: Спасибо за ваши полезные ответы. Я думаю, что мне лучше провести время чтобы узнать Maven, на данный момент я просто выбираю самое простое решение.
8 ответов:
поместите эти файлы свойств в
src/test/resources
. Файлы вsrc/test/resources
доступны в Eclipse автоматически черезeclipse:eclipse
но не будет включен в упакованную банку Maven.
чтобы исключить любой файл из каталога jar / target, вы можете использовать
<excludes>
тег в вашем pom.XML-файл.В следующем примере все файлы с
.properties
расширение не будет включено:<build> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>*.properties</exclude> </excludes> <filtering>false</filtering> </resource> </resources> </build>
по соглашению, каталог
src/main/resources
содержит ресурсы, которые будут использоваться приложением. Так что Maven включит их в финалJAR
.таким образом, в вашем приложении, вы получите доступ к ним с помощью
getResourceAsStream()
метод, так как ресурсы загружаются в classpath.Если вам нужно иметь их вне вашего приложения, не храните их в
src/main/resources
как они будут в комплекте с Maven. Конечно, вы можете исключить их (используя ссылку дал chkal), но лучше создать другой каталог (напримерsrc/main/external-resources
) для того, чтобы сохранить соглашения относительно .в последнем случае вам придется доставлять ресурсы самостоятельно в виде вашего файла JAR (это может быть достигнуто с помощью плагина сборки). Если вам нужно получить к ним доступ в своей среде Eclipse, перейдите в
Properties
вашего проекта, то вJava Build Path
наSources
tab, добавьте папку (напримерsrc/main/external-resources
). Затмение затем добавим этот каталог в путь к классам.
вы имеете в виду файлы имущество, находящееся в
src/main/resources
? Затем вы должны исключить их с помощью Maven-resource-plugin. Смотрите дополнительную информацию на следующей странице:http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html
Это вызывает именно для использования плагин Maven JAR
например, если вы хотите исключить все под
src/test/resources/
из последней банки, положите это:<build> <plugins> <!-- configure JAR build --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.3.1</version> <configuration> <excludes> <exclude>src/test/resources/**</exclude> </excludes> </configuration> </plugin> ...
файлы
src/test/resources/
по-прежнему будут доступны на пути к классу, они просто не будут в результирующем JAR.
исключить определенный шаблон файла при создании Maven jar с помощью Maven-jar-plugin.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.3</version> <configuration> <excludes> <exclude>**/*.properties</exclude> <exclude>**/*.xml</exclude> <exclude>**/*.exe</exclude> <exclude>**/*.java</exclude> <exclude>**/*.xls</exclude> </excludes> </configuration> </plugin>
когда я создаю исполняемый jar с зависимостями (используя это руководство), все файлы свойств также упаковываются в этот jar. Как это остановить? Спасибо.
файлы свойств откуда? Ваша главная банка? Зависимости?
в первом случае, поставив ресурсы под
src/test/resources
Как было предложено, вероятно,самый прямой и простой вариант.в последнем случае, вам придется создать пользовательский дескриптор ассамблеи с особенным
excludes/exclude
наunpackOptions
.
еще одна возможность-использовать Плагин Maven Shade, например, чтобы исключить файл свойств журнала, используемый только локально в вашей среде IDE:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>${maven-shade-plugin-version}</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>log4j2.xml</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin>
это, однако, исключит файлы из каждого артефакта, поэтому это может быть невозможно в каждой ситуации.