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