2016-03-08 118 views
7

我知道您對這方面的其他一些問題...getResource()方法將返回null與搖籃項目

但我的問題似乎有點不同,因爲我似乎有所有必要的事情不會有這個問題。

代碼:

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

的問題是,我已經在調試器檢查類加載器驗證了我的類路徑。這裏是我所看到的:

27 = {[email protected]} "file:/Users/dennis/Documents/Development/java/java-grader/build/classes/main/" 
28 = {[email protected]} "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的文件應該是可訪問的。糾正我,如果我錯了...

回答

8

如果您通過的資源路徑不是從/Class.getResource()開始,那麼類加載器會在類的包中查找資源。不在根。你的代碼應該是

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

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

兒子一炮,附加'getClassLoader()'作品 – djthoms