getResource()使用Gradle项目返回null

djt*_*oms 10 java resources classpath gradle

我知道还有其他一些问题......

但我的问题似乎有点不同,因为我似乎有所有必要的事情没有这个问题.

代码:

 this.getClass().getResource("checkstyle_whitespace.xml"); // null
Run Code Online (Sandbox Code Playgroud)

问题是我通过检查调试器中的类加载器来验证我的类路径.这就是我所看到的:

 27 = {URL@1235} "file:/Users/dennis/Documents/Development/java/java-grader/build/classes/main/"
 28 = {URL@1236} "file:/Users/dennis/Documents/Development/java/java-grader/build/resources/main/"
Run Code Online (Sandbox Code Playgroud)

Blow是tree我的目录结构的一个快速.见build/resourcessrc/main/resources.当gradle构建我的项目时,正在复制文件.

??? build
?   ??? classes
?   ?   ??? main
?   ?   ?   ??? javaGrader
?   ?   ??? test
?   ?       ??? javaGraderTest
?   ??? resources
?       ??? main
?           ??? checkstyle_whitespace.xml
?           ??? grammars
??? src
?   ??? main
?   ?   ??? java
?   ?   ?   ??? javaGrader
?   ?   ??? resources
?   ?       ??? checkstyle_whitespace.xml
?   ?       ??? grammars
?   ??? test
?       ??? java
?       ?   ??? javaGraderTest
?       ??? resources
?           ??? mini_test
??? target
?   ??? classes
?   ??? generated-sources
?   ?   ??? annotations
?   ??? generated-test-sources
?       ??? test-annotations
??? test_assets
Run Code Online (Sandbox Code Playgroud)

根据我的理解,文件应该是可访问的,因为它们在build.如果我错了,请纠正我......

JB *_*zet 13

如果传递的资源路径不是以/to 开头Class.getResource(),则类加载器会在类的包中查找资源.不是根源.你的代码应该是

this.getClass().getResource("/checkstyle_whitespace.xml")
Run Code Online (Sandbox Code Playgroud)

要么

this.getClass().getClassLoader().getResource("checkstyle_whitespace.xml")
Run Code Online (Sandbox Code Playgroud)