Gradle 如何从groovy jar库中获取资源目录中的文件
我无法从项目的编译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
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 libReadJSONResourceFile-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()
调用。在非静态方法中进行调用
可以正常工作。非常感谢。