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

问题描述 投票:0回答:8

当我创建一个带有依赖项的可执行罐(使用thisGuide)时,所有属性文件也都包装到该Jar中。如何阻止它发生?谢谢 update:我尝试使用

MavenResources插件将它们排除在外,但是当我在Eclipse运行时,我的应用程序不会找到属性文件(右键单击模块 - >运行为 - > Java应用程序)

update:感谢您的有用答案。我认为我最好花时间学习Maven,因为现在我只选择最简单的解决方案。

要从JAR /目标目录中排除任何文件,您可以在pom.xml文件中使用

<excludes>
maven
8个回答
138
投票
在下一个示例中,所有带有扩展名的文件都将不包括:

.properties

通过约定,目录
<build> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>*.properties</exclude> </excludes> <filtering>false</filtering> </resource> </resources> </build>

包含应用程序将使用的资源。因此,Maven将把它们包括在最后的
src/main/resources

19
投票
JAR

方法访问它们,因为资源已加载在classPath中。

如果您需要将它们放在应用程序之外,请不要将它们存储在
getResourceAsStream()
中,因为它们会被Maven捆绑在一起。当然,您可以将它们排除(使用
chkal

给出的链接),但是最好创建另一个目录(例如

src/main/resources

)以保持有关
src/main/external-resources

目录的约定。

在后一种情况下,您必须在JAR文件时独立交付资源(可以使用汇编插件来实现)。如果您需要在日食环境中访问它们,请转到项目的

src/main/resources
Properties,然后在
Java Build Path
中添加文件夹(例如
Sources
)。然后,Eclipse将在classPath中添加此目录。

这完全呼吁使用
mavenjar插件

,例如,如果您想将所有内容排除在最终罐子中,请放置:
src/main/external-resources

files下方的files仍将在class-path上可用,他们只是不会在产生的jar中。

16
投票

使用maven-jar-plugin创建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/
中的文件可通过

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

自动自动提供,但不会包含在Maven的包装罐中。
    


11
投票
src/test/resources

中的属性文件吗?然后,您应该使用Maven-Resource-Plugin排除它们。有关详细信息,请参见以下页面:

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

9
投票

其他可能性是使用
mavenShade插件,例如排除仅在IDE中本地使用的记录属性文件:
src/test/resources
但是,这将排除每个工件中的文件,因此在每种情况下都不可行。


7
投票

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

properties文件从哪里?你的主罐?依赖性? 

在前一种情况下,按建议将资源置于建议可能是最直接,最简单的选择。 在以后的情况下,您必须在


2
投票

中使用特殊src/main/resources创建一个自定义组件描述符。

在这里是aanther soluction

为了在Resources文件夹中分类所有文件,最终配置看起来像:


0
投票
或我们可以包含

仅包装一些文件或文件夹。 但是该方法具有副作用。 IDE还将在

src/test/resources
文件夹中排除资源文件。

Maven-Jar-Plugin

仅影响JAR文件。

I找到了一个更好的解决方案,可以使用

maven-jar-plugin
执行资源文件夹,在这里我们使用

excludes/exclude
    
	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.