getResource()使用Gradle项目返回null

时间:2016-03-08 07:37:55

标签: java gradle resources classpath

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

  

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

代码:

 this.getClass().getResource("checkstyle_whitespace.xml"); // null

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

 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/"

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

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

2 个答案:

答案 0 :(得分:13)

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

this.getClass().getResource("/checkstyle_whitespace.xml")

this.getClass().getClassLoader().getResource("checkstyle_whitespace.xml")

答案 1 :(得分:0)

在项目主文件夹中存在java文件夹的同一位置创建一个名为“ resources”的文件夹。并将所有图像和其他资源定位到“资源”文件夹中。得到这样的人

new ImageIcon(getClass().getClassLoader().getResource("image.png"));