Mã của tôi (Java) đọc một hình ảnh từ jar:Cách cấu hình sbt để nạp tài nguyên khi chạy ứng dụng?
Main.class.getResourceAsStream("/res/logo.png")
Tất cả mọi thứ chạy tốt (nếu tôi bắt đầu ứng dụng sau khi đóng gói nó vào một cái lọ). Nhưng khi tôi chạy nó bằng cách sử dụng nhiệm vụ run
của sbt, nó trả về cho tôi null
thay vì luồng cần thiết.
Chạy này từ SBT console
cũng cho null:
getClass.getResourceAsStream("/res/logo.png")
Có cách nào để nói với SBT để đầu tư nguồn lực của tôi trên classpath?
EDIT:
tôi đặt dir nguồn lực để được giống như nguồn dir:
build.sbt:
resourceDirectory <<= baseDirectory { _/"src" }
Khi tôi nạp 'console SBT của' và chạy như sau:
classOf[Main].getProtectionDomain().getCodeSource()
tôi vị trí của các lớp của tôi, nhưng nó không chứa thư mục res
cũng như bất kỳ tệp tài nguyên nào của tôi.
Dường như sbt chỉ sao chép tài nguyên vào bình kết quả và không sao chép chúng vào thư mục lớp. Tôi có nên sửa đổi nhiệm vụ biên dịch để di chuyển các tệp tài nguyên này vào thư mục lớp không?
EDIT2:
Vâng, khi tôi tự sao chép các tập tin tài nguyên đến các lớp học dir, tôi có thể dễ dàng truy cập nó từ giao diện điều khiển. Vì vậy, làm thế nào tôi nên tự động hóa quá trình này?
EDIT3:
Dường như SBT chỉ là không thể nhìn thấy thư mục tài nguyên của tôi - nó không thêm tệp vào kết quả file jar, trên thực tế!
Giải pháp:
resourceDirectory in Compile <<= baseDirectory { _/"src" }
tôi sử dụng 'getResourceAsStream 'từ sbt's' run', 'console' và' test' mà không có vấn đề gì. Có thể một số chi tiết khác sẽ giúp ích cho bạn. Phiên bản nào của sbt? Tệp nằm ở đâu (trong một tệp .jar hoặc 'src/main/resources' khác hoặc tệp khác)? Bạn có bất kỳ plugin hoặc cấu hình nào liên quan đến tài nguyên không? – leedm777
Sbt - phiên bản mới nhất, được tải xuống hôm nay (0.11.2, tôi nghĩ). Tệp nằm ở src/res/logo.png. Và tôi đã thêm "resourceDirectory << = baseDirectory {_ /" src "}" để build.sbt – Rogach
Điều gì xảy ra nếu bạn theo quy ước và đặt tài nguyên vào 'src/main/resources'? – leedm777