Moje kodu (Java) odczytuje obraz ze słoika:Jak skonfigurować sbt do ładowania zasobów podczas uruchamiania aplikacji?
Main.class.getResourceAsStream("/res/logo.png")
Wszystko działa dobrze (jeśli uruchomić aplikację po zapakowaniu go do słoika). Ale kiedy uruchomię go za pomocą zadania sbt, run
, to zwraca mi null
zamiast potrzebnego strumienia.
Running to z SBT console
również daje zerowy:
getClass.getResourceAsStream("/res/logo.png")
Czy istnieje sposób, aby powiedzieć SBT umieścić swoje zasoby na ścieżce klasy?
EDIT:
ustawić dir zasobów być taka sama jak źródłowego reż:
build.sbt:
resourceDirectory <<= baseDirectory { _/"src" }
Kiedy załadowany `konsolę SBT za” i pobiegł co następuje:
classOf[Main].getProtectionDomain().getCodeSource()
mam lokalizacja moich klas, ale nie zawiera ona ani folderu res
, ani żadnego z moich plików zasobów.
Wydaje się, że sbt kopiuje zasoby tylko do wynikowego słoika i nie kopiuje ich do klas dir. Czy powinienem zmodyfikować zadanie kompilacji, aby przenieść te pliki zasobów do katalogu klas?
EDIT2:
Tak, kiedy ręcznie skopiować plik zasobów do klasy dir, mogę łatwo uzyskać do niego dostęp z poziomu konsoli. Jak zatem zautomatyzować ten proces?
Edit3:
Wydaje się, że SBT jest po prostu w stanie zobaczyć mój folderu zasobów - nie dodawać pliki do wynikowego pliku jar, faktycznie!
Rozwiązanie:
resourceDirectory in Compile <<= baseDirectory { _/"src" }
używam 'getResourceAsStream 'od sbt' run', 'console' i' test' bez problemu. Może trochę więcej szczegółów pomogłoby. Jaką wersję sbt? Gdzie znajduje się plik (w innym .jar lub 'src/main/resources' lub innym)? Czy masz jakieś wtyczki związane z zasobami lub konfigurację? – leedm777
Sbt - najnowsza wersja, pobrana dzisiaj (0.11.2, myślę). Plik znajduje się w src/res/logo.png. I dodałem "resourceDirectory << = baseDirectory {_ /" src "}" do build.sbt – Rogach
Co się stanie, jeśli będziesz przestrzegać konwencji i umieścisz zasób w 'src/main/resources'? – leedm777