2012-11-29 29 views
9

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.

risposta

4

In sbt che cambia 'directory di lavoro' via baseDirectory impostazione per il test cambia baseDirectory che non è dir di base nel mio understangind e non è uguale new java.io.File(".").getAbsolutePath.

io non sono sicuro di quello che significa la dichiarazione di cui sopra, ma con SBT è necessario sborsare per cambiare la directory di lavoro durante la run o test. Questo è documentato in Enable forking e Change working directory.

Problemi correlati