2016-03-08 24 views
7

Tôi biết có một số câu hỏi khác về vấn đề này ...getResource() được trở về null với dự án Gradle

Nhưng vấn đề của tôi có vẻ hơi khác một chút vì tôi dường như có tất cả những thứ cần thiết để KHÔNG có vấn đề này.

Mã:

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

Vấn đề là tôi đã xác minh classpath của tôi bằng cách kiểm tra các bộ nạp lớp trong trình gỡ lỗi. Dưới đây là những gì tôi thấy:

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

Thổi nhanh chóng là tree cấu trúc thư mục của tôi. Xem build/resourcessrc/main/resources. Các tập tin đang được sao chép khi gradle xây dựng dự án của tôi.

├── 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 

Từ những gì tôi hiểu, các tệp sẽ có thể truy cập được vì chúng ở build. Sửa tôi nếu tôi sai ...

Trả lời

8

Nếu bạn vượt qua đường dẫn tài nguyên không bắt đầu bằng / đến Class.getResource(), trình tải lớp sẽ tìm tài nguyên trong gói của lớp. Không phải ở gốc. code của bạn nên

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

hoặc

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

Sơn của một khẩu súng, phụ thêm 'getClassLoader() 'công trình – djthoms

Các vấn đề liên quan