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


91

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

我的项目结构:

src / main / java / com / perseus / ..-Java包(源文件)

src / main / java / config / *。xml-春季配置文件

预期的jar结构:

com / perseus / ..-Java包(类文件)

config / *。xml-Spring配置文件

Answers:


80

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

sourceSets {
    main {
        resources {
            srcDirs "src/main/resources", "src/main/configs"
        }
    }
}

5
这是比接受的答案简单得多的解决方案
Stewart

70

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


1
为我工作,看起来是实现这一目标的最简单,最“正确”的方法。
EM-Creations

这个答案提出了一种解决方法,而不是解决方案,而Gradle提供了解决方案。
可怕的Ta

@TerribleTadpole这是正确的解决方案。所有其他都是解决方法。
jannis

63

谢谢大家,我将现有项目迁移到Gradle,但不怎么喜欢改变项目结构的想法。

我已经弄清楚了,认为这些信息对初学者可能有用。

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

version = '1.0.0'

jar {
   baseName = 'analytics'
   from('src/main/java') {
      include 'config/**/*.xml'
   }

   manifest {
       attributes 'Implementation-Title': 'Analytics Library', 'Implementation-Version': version
   }
}

34
重新配置源集更为准确。有点像sourceSets.main.resources { srcDirs = ["src/main/java"]; exclude "**/*.java" }
Peter Niederwieser 2014年

1
谢谢@PeterNiederwieser!试图将我的log4j.xml文件包含在我使用影子构建的可执行jar中。我也正在处理一个较旧的项目,无法随时更改目录结构。您的建议正是我所需要的!:D
皮科

@PeterNiederwieser-我在Java插件文档中注意到资源已经定义为排除* .java。“仅包含资源,并且排除在资源源目录中找到的任何.java文件。”
Joe Bowbeer 2015年

25

默认情况下,您添加到的所有文件src/main/resources都将包含在jar中。

如果您出于某种原因需要更改该行为,可以通过配置来进行sourceSets

文档的部分包含所有详细信息


4
你知道为什么只有内容.../resources/包括替代资源目录内容?
sargas

@sargas您可能应该开始一个新问题,在这里可以轻松地包含所有上下文。很难在评论部分获得很多信息:(
geoand 2015年

18

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

上面的答案都不能解决我的问题,但是我在Gradle论坛上找到了解决方案。我在build.gradle文件中添加了以下内容:

sourceSets.main.resources.srcDirs = [ "src/" ]
sourceSets.main.resources.includes = [ "**/*.png" ]

它告诉Gradle在src文件夹中查找资源,并要求它仅包含PNG文件。

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


2
我使用+=运算符将我的目录添加到现有目录中:例如sourceSets.main.resources.srcDirs += [ "src/main/java" ]
TmTron

3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.