Ich möchte in der Lage sein, das Java-Programm in einem bestimmten Verzeichnis auszuführen. Ich denke, dass es sehr praktisch ist, das Arbeitsverzeichnis zu parametrisieren, weil es die Konfiguration einfach ermöglicht.Arbeitsverzeichnis in sbt
Zum Beispiel in einem Ordner könnten Sie Konfiguration für den Test haben, in anderen könnten Sie Ressourcen für die Produktion benötigt haben. Sie denken wahrscheinlich, dass es eine Option gibt, den Klassenpfad für das Einschließen/Ausschließen von Ressourcen zu manipulieren, aber eine solche Lösung funktioniert nur, wenn Sie an im Klassenpfad gespeicherten Ressourcen interessiert sind und diese mit Classloader.getResource(r)
referenzieren. Aber was, wenn Sie eine externe Konfiguration haben und mit einfachen Anweisungen wie File file = new File("app.properties");
darauf zugreifen möchten?
Lassen Sie uns gewöhnlichen Beispiel sehen.
Ihre Anwendung verwendet app.properties Datei, in der Sie Anmeldeinformationen für externen Dienst speichern. Die Anwendung sucht nach dieser Datei im Arbeitsverzeichnis, da Sie die erwähnte Anweisung File file = new File("app.properties");
verwenden, um darauf zuzugreifen. In Ihren Tests möchten Sie app.properties speziell für Ihre Tests verwenden. In Ihren Integrationstests möchten Sie app.properties speziell für eine andere Umgebung verwenden. Und schließlich, wenn Sie Anwendung erstellen und freigeben, möchten Sie andere app.properties Datei bereitstellen. Alle diese Ressourcen Sie zugreifen möchten immer auf die gleiche Art und Weise nur durch File file = new File("app.properties");
Eingabe statt (Pseudocode):
if(configTest)
file = File("testWorkDir/app.properties");
else if(config2)
file = File("config2WorkDir/app.properties");
else
file = File("app.properties");
oder anstelle der Verwendung von Ressourcen in Classpath
this.getClass.getClassLoader.getResource("app.properties");
Natürlich Sie cleveren Programmierer und Sie verwenden Build Tool wie Maven, Gradle oder sbt :)
Begeistert am Anfang. Zumindest die Frage:
Gibt es eine Möglichkeit, Arbeitsverzeichnis in Java und wenn ja, wie man es in Build-Tools (vor allem in sbt) zu konfigurieren?
Zusätzliche Informationen:
- Ändern 'user.dir' Systemeigenschaft nicht funktioniert (ich habe versucht, es programaticly zu ändern).
- In sbt wechseln 'working directory' via baseDirectory setting for test ändert baseDirectory, die nicht Basisverzeichnis in meinem Understangind ist und es ist nicht gleich
new java.io.File(".").getAbsolutePath
. - Es ist möglich, eine Umgebungsvariable wie YOUR_APP_HOME bereitzustellen und Ressourcen von diesem Pfad aus zu referenzieren. Sie müssen sich jedoch in Ihrem Code daran erinnern.