В Maven как исключить ресурсы из сгенерированного jar?


когда я создаю исполняемый jar с зависимостями (используя это руководство), все файлы свойств также упаковываются в этот jar. Как это остановить? Спасибо.

обновление: я пытался исключить их с помощью плагин Maven resources, но тогда мое приложение не найдет файлы свойств, когда я запускаю его в Eclipse (щелкните правой кнопкой мыши на модуле -> Run As -> Java Application)

обновление: Спасибо за ваши полезные ответы. Я думаю, что мне лучше провести время чтобы узнать Maven, на данный момент я просто выбираю самое простое решение.

8 51

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>

это, однако, исключит файлы из каждого артефакта, поэтому это может быть невозможно в каждой ситуации.