使用 Gradle 将资源和配置文件添加到 JAR 中

问题描述 投票:0回答:8

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

我的项目结构:

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

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

预期的 jar 结构:

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

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

gradle jar build.gradle embedded-resource
8个回答
116
投票

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

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

87
投票

将配置文件从

src/main/java
移至
src/main/resources


73
投票

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

31
投票

默认情况下,您添加到

src/main/resources
的任何文件都将包含在 jar 中。

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

sourceSets
来实现。

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


21
投票

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


3
投票

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


1
投票

正如我在here所回答的那样,为了在配置资源目录时获得更精细的粒度,也可以使用

srcDir

sourceSets {
    main {
        resources {
            srcDir "src/main/resources"

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

因此,如果您有

src/main/java/config/*.xml
jar 结构,则会按照要求具有
configs/*.xml


0
投票

这是针对 Kotlin DSL(build.gradle.kts)。

将以下代码添加到您的子项目或应用程序build.gradle.kts文件中:

sourceSets {
    main {
        resources {
            srcDirs("src/main/configs", "src/main/misc")
        }
    }
    // OR another notation
    // main.get().resources.srcDirs("src/main/configs", "src/main/misc")
}

正如其他答案所提到的,

src/main/resources/
中的文件会自动添加到JAR中。上面代码中的
srcDirs()
函数将其给定路径添加到现有路径中,因此这些目录中的文件也将包含在 JAR 中。您可以添加任意数量的条目。

请注意,添加上述代码并将更改与 IDE 同步后,某些 IDE(例如 IntelliJ IDEA 和 Android Studio)会为这些目录显示一个有用的图标,以指示它们是资源根目录:

© www.soinside.com 2019 - 2024. All rights reserved.