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.