Gradle 如何从groovy jar库中获取资源目录中的文件

Gradle 如何从groovy jar库中获取资源目录中的文件,gradle,intellij-idea,groovy,jar,resources,Gradle,Intellij Idea,Groovy,Jar,Resources,我无法从项目的编译jar中读取resources目录中的JSON文件 但是。。。第一件事: 我在Intellij idea(v2017.3.4社区版)中创建了一个“Gradle Groovy”项目,其结构如下: 如您所见,我在src/Main目录中有一个Main.groovy类和一个resources文件夹 在resources目录中,我有一个资源db/products.json 通过进入File>Project Structure>Modules>Project Module>Sources

我无法从项目的编译jar中读取
resources
目录中的
JSON
文件

但是。。。第一件事:

我在Intellij idea(v2017.3.4社区版)中创建了一个“Gradle Groovy”项目,其结构如下:

如您所见,我在
src/Main
目录中有一个
Main.groovy
类和一个
resources
文件夹

resources
目录中,我有一个资源
db/products.json

通过进入
File>Project Structure>Modules>Project Module>Sources
菜单,我们可以检查
src/groovy
文件夹是否标记为
Sources
resources
文件夹是否标记为
Resource folder
,因此我可以确保在
classpath
上正确设置了这些文件夹:

在我的主类中,我添加了以下代码行以加载
/db/products.json
资源:

通过在Intellij idea中运行项目,我可以检查资源是否无缝加载:

太好了!但是

现在接球! 当我使用
gradle
-通过
gradlew build
命令编译项目时,jar lib
ReadJSONResourceFile-1.0-SNAPSHOT
build/libs
文件夹中生成

查看jar的结构,我们可以检查
db
resource文件夹是否位于jar的根位置:

但是当我通过命令执行jar时:

groovy-cp build/libs/ReadJSONResourceFile-1.0-SNAPSHOT.jar-e“org.company.demo.Main.Main()”

资源未成功加载
getResource()
只返回
null

我一直试图用这里提供的
堆栈溢出
上的其他解决方案来解决这个问题,但它们都不起作用


我错过了一些东西。。。您能帮忙吗?

您正在用静态方法调用
getClass()
。也许这就是问题所在?它应该是
getClass().getResource(“/db/products.json”)
getResource
接受映射作为参数吗?是的@dagget,我相信这就是问题所在。我创建了一个
Java
应用程序(而不是groovy应用程序),当我键入
getClass()
时,Intellij idea立即警告我,我不能在
静态方法中调用
getClass()
。然后我创建了一个单例类来包装
getClass().getResources()
调用,一切都开始正常运行(通过IDE和jar运行应用)@abdul这不是
getResource()
参数中的映射。。。这只是Intellij idea的intellisense在起作用!:)@达吉特,迟来的回答:)你是对的。问题在于
main
static方法中的
getClass()
调用。在
非静态方法中进行调用
可以正常工作。非常感谢。