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

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

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

更新:感谢您的有用答案。 我想我最好花时间学习Maven,现在我只是select最简单的解决scheme。

把这些属性文件放在src/test/resources 。 在Eclipse中, src/test/resources中的文件可以通过eclipse:eclipse自动使用,但不会被Maven包含在打包的JAR中。

要从jar / target目录中排除任何文件,您可以在pom.xml文件中使用<excludes>标记。

在下一个例子中,所有带有.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()方法访问它们,因为资源是在类path中加载的。

如果您需要在应用程序之外使用它们,请不要将它们存储在src/main/resources因为它们将被Maven捆绑在一起。 当然,你可以排除它们(使用chkal给出的链接),但是为了保持关于src/main/resources目录的约定,最好创build另一个目录(例如src/main/external-resources )。

在后一种情况下,您将不得不独立地提供资源作为JAR文件(这可以通过使用Assembly插件来实现)。 如果您需要在Eclipse环境中访问它们,请转到项目的“ Properties ”,然后在“ Sources文件”的“ Java Build Path选项卡中添加该文件夹(例如src/main/external-resources )。 然后Eclipse将在类path中添加这个目录。

你的意思是位于src/main/resources属性文件吗? 那么你应该使用maven-resource-plugin排除它们。 有关详细信息,请参阅下一页。

http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html

这要求使用Maven JAR插件

例如,如果你想排除最后一个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/下的文件仍然可以在类path上使用,它们只是不会生成JAR文件。

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

属性文件从哪里来? 你的主要jar子? 依赖?

在前一种情况下,按照build议将资源放在src/test/resources resources下可能是最直接和最简单的select。

在后面的例子中,你将不得不在unpackOptions创build一个特殊的excludes/excludeassembly描述符。

另一种可能是使用Maven Shade插件 ,例如排除只在本地IDE中使用的日志logging属性文件:

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

然而,这将会排除每个工件的文件,所以在任何情况下都是不可行的。