如何使用Gradle将配置文件或其他资源添加到我的jar包中?
我的项目结构:
src/main/java/com/perseus/.. --- Java包(源代码文件)
src/main/java/config/*.xml --- Spring配置文件
期望的jar包结构:
com/perseus/.. --- Java包(类文件)
config/*.xml --- Spring配置文件
如何使用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
}
}
sourceSets.main.resources { srcDirs = ["src/main/java"]; exclude "**/*.java" }
,这将排除所有 ".java" 文件。 - Peter Niederwieser默认情况下,您添加到 src/main/resources
目录下的文件将被包含在jar包中。
如果由于某种原因需要更改此行为,可以通过配置 sourceSets
来实现。
这部分 文档提供了所有的细节。
.../resources/
目录的内容而不是连同目录内的内容一起包括? - sargas我也遇到了同样的问题。我在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" ]
。 - TmTron这是为了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)会显示有用的图标,以指示它们是资源根目录: