使用gradle将资源、配置文件添加到jar中

使用gradle将资源、配置文件添加到jar中,gradle,build.gradle,Gradle,Build.gradle,如何使用gradle将配置文件或任何其他资源添加到jar中 我的项目结构: src/main/java/com/perseus/。——Java包(源文件) src/main/java/config/*.xml--Spring配置文件 预期的jar结构: com/perseus/。——Java包(类文件) config/*.xml---Spring配置文件 默认情况下,添加到src/main/resources的任何文件都将包含在jar中 如果出于任何原因需要更改该行为,可以通过配置sources

如何使用gradle将配置文件或任何其他资源添加到jar中

我的项目结构:

src/main/java/com/perseus/。——Java包(源文件)

src/main/java/config/*.xml--Spring配置文件

预期的jar结构:

com/perseus/。——Java包(类文件)

config/*.xml---Spring配置文件


默认情况下,添加到
src/main/resources
的任何文件都将包含在jar中

如果出于任何原因需要更改该行为,可以通过配置
sourceset
来实现


文档的一部分包含了所有细节

将配置文件从
src/main/java
移动到
src/main/resources

谢谢大家,我当时正在将一个现有项目迁移到Gradle,不喜欢将项目结构更改那么多

我已经弄明白了,我想这些信息可能对初学者有用

下面是我的“build.gradle”中的一个示例任务:

version='1.0.0'
罐子{
baseName='analytics'
from('src/main/java'){
包括“config/***.xml”
}
显示{
属性“实现标题”:“分析库”,“实现版本”:版本
}
}

我遇到了同样的问题。我在Java包中有一个PNG文件,但它没有与源文件一起导出到最终的JAR中,这导致应用程序在启动时崩溃(找不到文件)

上面的答案都没有解决我的问题,但我在Gradle论坛上找到了解决办法。我将以下内容添加到我的
build.gradle
文件中:

sourceSets.main.resources.srcDirs = [ "src/" ]
sourceSets.main.resources.includes = [ "**/*.png" ]
它告诉Gradle在
src
文件夹中查找资源,并要求它只包含PNG文件


EDIT:请注意,如果您使用Eclipse,这将破坏您的运行配置,并且在尝试运行程序时会出现
main class not found
错误。为了解决这个问题,我找到的唯一解决方案是将图像移动到另一个目录,例如
res/
,并将其设置为
srcDirs
,而不是
src/

,我在搜索如何为资源添加额外目录时遇到了这篇文章。我找到了一个可能对某人有用的解决方案。以下是我的最终配置:

sourceset{
主要{
资源{
srcDirs“src/main/resources”、“src/main/configs”
}
}
}

请注意,src/main/resources下的路径必须与希望访问资源的.class文件的包路径匹配。请参阅我的答案。

重新配置源集更准确。类似于
sourceset.main.resources{srcDirs=[“src/main/java”];排除“***.java”}
。谢谢@PeterNiederwieser!!我一直试图将log4j.xml文件包含在我使用shadow构建的可执行jar中。我也在处理一个较旧的项目,无法随时更改目录结构。你的建议正是我需要的!!:D@PeterNiederwieser-我注意到Java插件文档中已经定义了排除*.Java的资源。“只包含资源,不包含在资源源目录中找到的任何.java文件。”您知道为什么只包含
../resources/
的内容,而不包含包含该内容的资源目录吗?@sargas您可能应该开始一个新问题,以便轻松包含所有上下文。在评论部分很难获得很多信息:(对我来说很有用,看起来是最简单和“最正确的”实现这一点的方法。这个答案建议了一个变通方法而不是解决方案,Gradle提供了一个解决方案。@TerribleTadpole这是正确的解决方案。所有其他都是变通方法。我使用
+=
操作符将我的目录添加到现有目录中:例如
sourceset.main.resources.srcDirs+=[“src/main/java”]
这是一个比公认答案简单得多的解决方案