当我创建一个带有依赖项的可执行jar时(使用this guide),所有属性文件也被打包到该jar中。如何阻止它发生?感谢。
更新:我尝试使用Maven resources plugin排除它们,但是当我在Eclipse中运行它时,我的应用程序将找不到属性文件(右键单击模块 - >运行方式 - > Java应用程序)
更新:感谢您的有用答案。我想我最好花时间学习Maven,现在我只选择最简单的解决方案。
答案 0 :(得分:103)
要从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>
答案 1 :(得分:17)
按照惯例,目录src/main/resources
包含应用程序将使用的资源。所以Maven会将它们包含在最终的JAR
中。
因此,在您的应用程序中,您将使用getResourceAsStream()
方法访问它们,因为资源已加载到类路径中。
如果您需要将它们放在应用程序之外,请不要将它们存储在src/main/resources
中,因为它们将由Maven捆绑。当然,您可以排除它们(使用 chkal 给出的链接),但最好创建另一个目录(例如src/main/external-resources
)以保持有关{{1}的约定目录。
在后一种情况下,您必须独立地作为JAR文件提供资源(这可以通过使用Assembly插件来实现)。如果您需要在Eclipse环境中访问它们,请转到项目的src/main/resources
,然后在Properties
选项卡的Java Build Path
中添加文件夹(例如Sources
) 。然后,Eclipse将在类路径中添加此目录。
答案 2 :(得分:10)
将这些属性文件放在src/test/resources
中。 src/test/resources
中的文件在Eclipse中通过eclipse:eclipse
自动提供,但不会被Maven包含在打包的JAR中。
答案 3 :(得分:8)
您是指src/main/resources
中的属性文件吗?然后你应该使用maven-resource-plugin排除它们。有关详细信息,请参阅以下页面:
http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html
答案 4 :(得分:6)
这完全要求使用Maven JAR Plugin
例如,如果要从最终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中。
答案 5 :(得分:4)
使用maven-jar-plugin创建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>
答案 6 :(得分:1)
当我创建一个带有依赖项的可执行jar时(使用本指南),所有属性文件也都打包到该jar中。如何阻止它发生?感谢。
属性文件从哪里来?你的主罐?依赖?
在前一种情况下,按照建议将资源置于src/test/resources
之下可能是最直接和最简单的选择。
在后一种情况下,您必须在unpackOptions
中创建一个带有特殊excludes/exclude
的自定义程序集描述符。
答案 7 :(得分:1)
另一种可能性是使用Maven Shade Plugin,例如排除仅在IDE本地使用的日志记录属性文件:
System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Azure.Plugins.Diagnostics.dll.RoleInformation.get_IsWorkerRole()
但是,这将从每个工件中排除文件,因此在任何情况下都可能不可行。