在Maven中,如何从生成的jar中排除资源?

在Maven中,如何从生成的jar中排除资源?,maven,Maven,当我创建一个带有依赖项的可执行jar(使用)时,所有属性文件也打包到该jar中。如何阻止它发生?谢谢 更新:我试图使用排除它们,但是当我在Eclipse中运行它时,我的应用程序找不到属性文件(右键单击模块->运行方式->Java应用程序) 更新:谢谢你有用的答案。我想我最好花点时间学习Maven,因为现在我只选择最简单的解决方案。你是说属性文件位于src/main/resources?然后应该使用maven资源插件排除它们。有关详细信息,请参见下页: 按照惯例,目录src/main/resour

当我创建一个带有依赖项的可执行jar(使用)时,所有属性文件也打包到该jar中。如何阻止它发生?谢谢

更新:我试图使用排除它们,但是当我在Eclipse中运行它时,我的应用程序找不到属性文件(右键单击模块->运行方式->Java应用程序)


更新:谢谢你有用的答案。我想我最好花点时间学习Maven,因为现在我只选择最简单的解决方案。

你是说属性文件位于
src/main/resources
?然后应该使用maven资源插件排除它们。有关详细信息,请参见下页:


按照惯例,目录
src/main/resources
包含应用程序将使用的资源。因此Maven将把它们包含在最终的
JAR

因此,在应用程序中,当资源加载到类路径中时,您将使用
getResourceAsStream()
方法访问它们

如果需要在应用程序外部使用它们,请不要将它们存储在
src/main/resources
中,因为它们将由Maven捆绑。当然,您可以排除它们(使用chkal提供的链接),但最好创建另一个目录(例如
src/main/external resources
),以保持关于
src/main/resources
目录的约定


在后一种情况下,您必须将资源作为JAR文件独立交付(这可以通过使用汇编插件实现)。如果需要在Eclipse环境中访问它们,请转到项目的
属性
,然后在
Sources
选项卡中的
Java构建路径
中添加文件夹(例如
src/main/external resources
)。Eclipse随后将在类路径中添加此目录。

将这些属性文件放入
src/test/resources
中。
src/test/resources
中的文件可以通过
Eclipse:Eclipse
在Eclipse中自动获得,但Maven不会将其包含在打包的JAR中

当我创建一个带有依赖项的可执行jar(使用本指南)时,所有属性文件也打包到该jar中。如何阻止它发生?谢谢

属性文件来自哪里?你的主罐子?依赖关系

在前一种情况下,按照建议将资源置于
src/test/resources
下可能是最直接和最简单的选择


在后一种情况下,您必须在.

中创建一个带有特殊
excludes/exclude
的自定义程序集描述符。要从jar/target目录中排除任何文件,您可以使用pom.xml文件中的
标记

在下一个示例中,不包括扩展名为
.properties
的所有文件:


src/main/resources
*.物业
假的

这正好调用了使用

例如,如果您想从最后一个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>

...

org.apache.maven.plugins
maven jar插件
2.3.1
src/测试/资源/**
...

src/test/resources/
下的文件仍将在类路径上可用,它们不会出现在结果JAR中。

另一种可能性是使用,例如,排除仅在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>

org.apache.maven.plugins
maven阴影插件
${maven shade插件版本}
包裹
阴凉处
*:*
log4j2.xml

但是,这将从每个工件中排除文件,因此在所有情况下可能都不可行。

在使用maven jar插件创建maven jar期间排除特定的文件模式

<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>

org.apache.maven.plugins
maven jar插件
2.3
**/*.物业
**/*.xml
**/*.exe
**/*.爪哇
**/*.xls

但是当我在Eclipse中运行应用程序时,我的应用程序找不到属性文件(右键单击模块->运行方式->Java应用程序),您可以为生成可执行JAR添加一个单独的Maven配置文件,并在其中排除属性文件。而不是完全排除目录,OP希望在制作罐子时排除它们。因此,使用
maven jar-plug
并将其排除在其中更有意义。像这个答案一样,你能更精确地描述这些资源吗?为什么要将它们从JAR中排除?什么时候需要它们?我想把它们排除在外,因为它们存储应用程序的配置非常需要一个简单的解决方案。我希望我能接受这里的所有答案。这是一个糟糕的答案,因为它是特定于Eclipse的,依赖于Eclipse无法为main和test实现单独的类路径。其他IDE有单独的类路径,因此您的代码无法在这些IDE中工作。希望Eclipse在某些时候也会有单独的类路径。请确保将build/outputDirectory定义为不同于Eclipse的默认输出文件夹,否则从mvn命令行构建的jar可能包含Eclipse放在那里的内容(例如src/test/resources的内容)那么,您实际的测试资源去了哪里?一般来说,这也是一个糟糕的答案,因为它需要更改问题中给出的设置。也许有人需要他们在
src/main/resources
中的东西。我想我做错了。可能
src/main