Mi piacerebbe essere in grado di eseguire il programma java in una directory specifica. Penso che sia abbastanza conveniente parametrizzare la directory di lavoro, perché consente di gestire facilmente le configurazioni.directory di lavoro in sbt
Ad esempio in una cartella è possibile avere la configurazione per il test, in altre si potrebbero avere risorse necessarie per la produzione. Probabilmente pensate che ci sia l'opzione per manipolare il classpath per includere/escludere le risorse ma tale soluzione funziona solo se siete interessati alle risorse memorizzate in classpath e facendo riferimento a esse usando Classloader.getResource(r)
. Ma cosa succede se si dispone di una configurazione esterna e si desidera accedervi utilizzando semplici istruzioni come File file = new File("app.properties");
?
Vediamo un esempio normale.
L'applicazione utilizza il file app.properties, in cui si memorizzano le credenziali per il servizio esterno. L'applicazione cerca questo file nella directory di lavoro, perché si utilizza l'istruzione File file = new File("app.properties");
menzionata per accedervi. Nei test si desidera utilizzare app.properties specifiche per i test. Nei test di integrazione si desidera utilizzare app.properties specifiche per un altro ambiente. Infine, quando si crea e si rilascia l'applicazione, si desidera fornire altro file app.properties. Tutte queste risorse si vogliono accedere sempre nello stesso modo semplicemente digitando File file = new File("app.properties");
invece di (pseudo codice):
if(configTest)
file = File("testWorkDir/app.properties");
else if(config2)
file = File("config2WorkDir/app.properties");
else
file = File("app.properties");
o invece di usare le risorse nel classpath
this.getClass.getClassLoader.getResource("app.properties");
Naturalmente siete programmatore intelligente e usi lo strumento di costruzione come Maven, Gradle o SBT :)
Enought all'inizio. Almeno The Question:
C'è un modo per impostare la directory di lavoro in java e se sì come configurarlo negli strumenti di compilazione (specialmente in sbt)?
Ulteriori informazioni:
- cambiando proprietà di sistema 'user.dir' non funziona (ho provato a cambiarlo programaticly).
- In sbt che cambia 'working directory' via baseDirectory setting for test cambia baseDirectory che non è la dir base nel mio understangind e non è uguale a
new java.io.File(".").getAbsolutePath
. - Fornire una variabile di ambiente come YOUR_APP_HOME e fare riferimento alle risorse da questo percorso è fattibile ma è necessario ricordarsi di ciò nel codice.