2012-11-29 29 views
9

Chciałbym móc uruchomić program java w określonym katalogu. Myślę, że wygodnie jest parametryzować katalog roboczy, ponieważ pozwala on łatwo zarządzać konfiguracjami.katalog roboczy w sbt

Na przykład w jednym folderze można mieć konfigurację do testu, w innych można mieć zasoby potrzebne do produkcji. Prawdopodobnie myślisz, że istnieje opcja manipulowania ścieżką klas dla włączania/wyłączania zasobów, ale takie rozwiązanie działa tylko wtedy, gdy interesujesz się zasobami przechowywanymi w ścieżce klas i odwołuje się do nich przy użyciu Classloader.getResource(r). Ale co, jeśli masz zewnętrzną konfigurację i chcesz uzyskać do niej dostęp za pomocą prostych instrukcji, takich jak File file = new File("app.properties");?

Zobaczmy zwykły przykład.

Twoja aplikacja używa pliku app.properties, w którym przechowuje się referencje dla usługi zewnętrznej. Aplikacja szuka tego pliku w katalogu roboczym, ponieważ używasz wspomnianej instrukcji, aby uzyskać do niego dostęp. W twoich testach chcesz użyć app.properties specyficznych dla twoich testów. W testach integracyjnych chcesz użyć app.properties specyficznych dla innego środowiska. I wreszcie, kiedy budujesz i zwalniasz aplikację, chcesz dostarczyć inny plik app.properties. Wszystkie te zasoby chcesz uzyskać dostęp zawsze w ten sam sposób, po prostu przez wpisanie File file = new File("app.properties"); zamiast (pseudo kod):

if(configTest) 
    file = File("testWorkDir/app.properties"); 
else if(config2) 
    file = File("config2WorkDir/app.properties"); 
else 
    file = File("app.properties"); 

lub zamiast wykorzystywania zasobów w ścieżce klasy

this.getClass.getClassLoader.getResource("app.properties"); 

Oczywiście jesteś sprytny programista i używasz narzędzia do budowania takiego, jak maven, gradle lub sbt :)

Enought od samego początku. Przynajmniej pytanie:

Czy istnieje sposób, aby ustawić katalog roboczy w java i jeśli tak, jak skonfigurować go w narzędziach budowania (zwłaszcza w sbt)?

Dodatkowe informacje:

  • zmieniając właściwość systemu 'user.dir' nie działa (próbowałem go zmienić programaticly).
  • W sbt zmiana 'working directory' via baseDirectory setting for test zmienia katalog podstawowy, który nie jest katalogiem podstawowym w moim understangind i nie jest równy new java.io.File(".").getAbsolutePath.
  • Dostarczenie zmiennej środowiskowej, takiej jak YOUR_APP_HOME i odniesienie zasobów z tej ścieżki, jest wykonalne, ale należy o tym pamiętać w swoim kodzie.

Odpowiedz

4

W SBT zmieniając „Katalog pracy” poprzez katalogbazowy ustawienie testu zmienia katalogbazowy który nie jest podstawa reż moim understangind i nie jest równy new java.io.File(".").getAbsolutePath.

Nie jestem pewien, co oznacza, że ​​powyższe stwierdzenie, ale z SBT trzeba bulić zmienić katalog roboczy podczas run lub test. Jest to udokumentowane w Enable forking i Change working directory.