Ответ 1
Поместите эти файлы свойств в src/test/resources
. Файлы в src/test/resources
доступны в Eclipse автоматически через eclipse:eclipse
, но не будут включены в пакетный JAR by Maven.
Когда я создаю исполняемую банку с зависимостями (используя данное руководство), все файлы свойств также упаковываются в эту банку. Как остановить это? Спасибо.
UPDATE: я попытался исключить их, используя плагин ресурсов Maven, но тогда мое приложение не найдет файлы свойств при запуске он в Eclipse (щелкните правой кнопкой мыши по модулю → Запустить как → Java-приложение)
ОБНОВЛЕНИЕ: Спасибо за полезные ответы. Я думаю, мне лучше потратить время на изучение Maven, так как сейчас я просто выбираю самое простое решение.
Поместите эти файлы свойств в src/test/resources
. Файлы в src/test/resources
доступны в Eclipse автоматически через eclipse:eclipse
, но не будут включены в пакетный JAR by 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()
, поскольку ресурсы загружаются в путь к классам.
Если вам нужно иметь их вне приложения, не храните их в src/main/resources
, поскольку они будут связаны Maven. Конечно, вы можете исключить их (используя ссылку, заданную chkal), но лучше создать другой каталог (например, src/main/external-resources
), чтобы сохранить соглашения относительно каталога src/main/resources
.
В последнем случае вам придется доставлять ресурсы самостоятельно в качестве вашего JAR файла (этого можно добиться с помощью плагина Assembly). Если вам нужно получить к ним доступ в среде Eclipse, перейдите в Properties
вашего проекта, а затем на вкладке Java Build Path
в Sources
добавьте папку (например, src/main/external-resources
). Затем Eclipse добавит этот каталог в путь к классам.
Вы имеете в виду файлы свойств, расположенные в src/main/resources
? Затем вы должны исключить их, используя плагин maven-resource. Подробнее см. на следующей странице:
http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html
Это вызывает именно использование Maven JAR Plugin
Например, если вы хотите исключить все из 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.
Когда я создаю исполняемую банку с зависимостями (используя это руководство), все файлы свойств также упаковываются в эту банку. Как остановить это? Спасибо.
Свойства файлов откуда? Ваша главная банка? Зависимости?
В первом случае размещение ресурсов под src/test/resources
, как было предложено, вероятно, является самым прямым и простым вариантом.
В более позднем случае вам нужно создать собственный дескриптор сборки со специальным excludes/exclude
в unpackOptions
.
Другая возможность - использовать Maven Shade Plugin, например. для исключения файла свойств ведения журнала, который используется только локально в вашей среде 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>
Это, однако, исключает файлы из каждого артефакта, поэтому это может быть невыполнимо в любой ситуации.