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

时间:2014-07-13 15:39:45

标签: gradle build.gradle

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

我的项目结构:

  

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

     

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

预期的jar结构:

  

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

     

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

6 个答案:

答案 0 :(得分:58)

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

答案 1 :(得分:52)

谢谢大家,我正在将现有项目迁移到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
   }
}

答案 2 :(得分:45)

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

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

答案 3 :(得分:22)

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

如果由于某种原因需要更改该行为,可以通过配置sourceSets来实现。

This部分文档包含所有细节

答案 4 :(得分:14)

我遇到了同样的问题。我在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/。< / p>

答案 5 :(得分:0)

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