Per impostazione predefinita, SBT compila la sorgente sotto src/main
e src/tests
a target/scala-[version]/classes
e target/scala-[version]/test-classes
, rispettivamente. Mi piacerebbe definire un altro gruppo chiamato core che posso inserire in src/core/java
o src/core/scala
e averlo compilato in un percorso di classe separato. Come faccio a fare questo?Come definire un altro ambito di compilazione in SBT?
Il mio motivo: voglio avere gruppi separati di file di classe, perché voglio ricompilare e ricaricare il nuovo codice dell'applicazione durante lo sviluppo, senza riavviare il processo JVM per l'applicazione in esecuzione. Quindi le classi core si caricheranno all'avvio dell'applicazione e useranno un classloader personalizzato per caricare tutto il resto da src/main. Queste ultime classi saranno ricaricabili. Devo farlo perché sto scrivendo un programma musicale che carica uno strumento software tramite JNI, che richiede molto tempo per essere caricato. Riavviare l'app durante lo sviluppo fa perdere troppo tempo.
Ho principalmente bisogno di separare i file di classe. Se stavo producendo vasi, vorrei myapp-core.jar e myapp-main.jar, ma non è così importante, poiché questo è per lo sviluppo più del prodotto finale.
Un primo tentativo:
val Core = config("core")
...
classDirectory in Core <<= crossTarget(t => file(t.getAbsolutePath + "core-classes"))
dà questo errore:
Reference to undefined setting:
{.}/*:cross-target from {.}/core:class-directory
Did you mean *:cross-target ?
andrò leggere sugli ambiti ora ...
Se l'esempio è più coinvolto di quanto necessario o compreso, cosa si intende fare specificamente con la configurazione aggiuntiva? Pubblicalo, includilo nel barattolo principale, ...? –
Non capisco ancora quell'esempio. Ho aggiunto alla domanda per spiegare cosa voglio fare con la configurazione aggiuntiva. –
Funziona alla grande, ma come si rende disponibile la configurazione del Core alla configurazione di Test? – Brendanator