如何使用 gradle 将配置文件或任何其他资源添加到我的 jar 中?
我的项目结构:
src/main/java/com/perseus/.. --- Java 包(源文件)
src/main/java/config/*.xml --- Spring 配置文件
预期的 jar 结构:
com/perseus/.. --- Java 包(类文件)
config/*.xml --- Spring 配置文件
我在搜索如何添加额外的资源目录时发现了这篇文章。我找到了一个可能对某人有用的解决方案。这是我的最终配置:
sourceSets {
main {
resources {
srcDirs "src/main/resources", "src/main/configs"
}
}
}
将配置文件从
src/main/java
移至 src/main/resources
。
谢谢大家,我正在将现有项目迁移到 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
}
}
默认情况下,您添加到
src/main/resources
的任何文件都将包含在 jar 中。
如果您出于某种原因需要更改该行为,可以通过配置
sourceSets
来实现。
文档的这部分包含所有详细信息
我遇到了同样的问题。我在 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/
。
请注意,src/main/resources 下的路径必须与希望访问资源的 .class 文件的包路径匹配。请参阅我的回答这里。
这是针对 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)会为这些目录显示一个有用的图标,以指示它们是资源根目录: