Il mio codice (Java) legge un'immagine dal vaso:Come configurare sbt per caricare risorse durante l'esecuzione dell'applicazione?
Main.class.getResourceAsStream("/res/logo.png")
Tutto funziona bene (se inizio l'applicazione dopo il confezionamento in un barattolo). Ma quando lo eseguo usando l'attività run
di sbt, mi restituisce null
invece del flusso necessario.
L'esecuzione di questo da SBT console
dà anche nullo:
getClass.getResourceAsStream("/res/logo.png")
C'è un modo per dire SBT di mettere le mie risorse sul classpath?
EDIT:
ho impostato il dir risorse per essere uguale a dir fonte:
build.sbt:
resourceDirectory <<= baseDirectory { _/"src" }
Quando ho caricato `console di SBT' ed eseguito il seguente:
classOf[Main].getProtectionDomain().getCodeSource()
ho ottenuto la posizione delle mie classi, ma non contiene né la cartella res
né alcuno dei miei file di risorse.
Sembra che sbt copi le risorse solo nel jar risultante e non le copi nella directory delle classi. Dovrei modificare l'attività di compilazione per spostare questi file di risorse nella directory delle classi?
EDIT2:
Sì, quando copio manualmente il file di risorse alle classi dir, posso facilmente accedere da console. Quindi, come dovrei automatizzare questo processo?
Edit3:
Sembra che SBT è solo in grado di vedere la mia cartella delle risorse - non aggiungere file risultante file jar, in realtà!
Soluzione:
resourceDirectory in Compile <<= baseDirectory { _/"src" }
Io uso 'getResourceAsStream 'da sbt's' run', 'console' e' test' senza problemi. Forse altri dettagli potrebbero aiutare. Quale versione di sbt? Dove si trova il file (in un altro .jar, o 'src/main/resources', o altro)? Avete plugin o configurazioni relativi alle risorse? – leedm777
Sbt - ultima versione, scaricata oggi (0.11.2, penso). Il file si trova in src/res/logo.png. E ho aggiunto "resourceDirectory << = baseDirectory {_ /" src "}" a build.sbt – Rogach
Cosa succede se segui la convenzione e inserisci la risorsa in 'src/main/resources'? – leedm777