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

Posted

技术标签:

【中文标题】使用 gradle 将资源、配置文件添加到您的 jar 中【英文标题】:Add resources and config files to your JAR using Gradle 【发布时间】:2014-09-03 15:39:21 【问题描述】:

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

我的项目结构:

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

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

预期的 jar 结构:

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

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

【问题讨论】:

【参考方案1】:

正如我已回答here,为了在配置资源目录时获得更多粒度,还可以使用srcDir

sourceSets 
    main 
        resources 
            srcDir "src/main/resources"

            srcDir "src/main"
            include "configs/**/*.xml"
        
    

因此,如果您有 src/main/java/config/*.xml jar 结构,则按要求将有 configs/*.xml

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

这是一个比公认答案简单得多的解决方案【参考方案4】:

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

【讨论】:

重新配置源集更准确。类似sourceSets.main.resources srcDirs = ["src/main/java"]; exclude "**/*.java" 谢谢@PeterNiederwieser!!一直试图让我的 log4j.xml 文件包含在我使用 shadow 构建的可执行 jar 中。我也在处理一个较旧的项目,无法轻易更改目录结构。你的建议正是我所需要的!! :D @PeterNiederwieser - 我在 Java 插件文档中注意到资源已被定义为排除 *.java。 “仅包含资源,不包括在资源源目录中找到的任何 .java 文件。”【参考方案5】:

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

【讨论】:

我使用+= 运算符将我的目录添加到现有目录中:例如sourceSets.main.resources.srcDirs += [ "src/main/java" ]【参考方案6】:

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

【讨论】:

对我有用,看起来是实现这一目标的最简单和“最正确”的方法。 这个答案建议的是一种变通方法而不是解决方案,Gradle 提供了一个解决方案。 @TerribleTadpole 这是正确的解决方案。所有其他都是解决方法。【参考方案7】:

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

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

This部分文档包含所有细节

【讨论】:

你知道为什么只包含.../resources/ 的内容而不是resources 目录 的内容吗? @sargas 您可能应该开始一个新问题,您可以轻松地包含所有上下文。在评论部分很难得到很多信息:(

以上是关于使用 gradle 将资源、配置文件添加到您的 jar 中的主要内容,如果未能解决你的问题,请参考以下文章

xcode 8.0“将Push Notif(..)添加到您的App ID”警告,同时已添加

6.2、Android Studio 添加编译依赖

解决android studio中的gradle依赖问题?

将“Inter-App Audio”权利添加到您的权利文件中

查找预编译头文件时意外结束。您是不是忘记将#include stdafx.h 添加到您的源代码中?

css Bootstrap Equal Column Heights - 将CSS添加到您的文件中,并将“row-eq-height”类添加到您想要的列周围的行中