我想能夠在特定的目錄下運行java程序。我認爲,參數化工作目錄非常方便,因爲它可以輕鬆管理配置。sbt的工作目錄
例如,在一個文件夾中,您可以配置測試,而在其他文件夾中,您可以擁有生產所需的資源。您可能會認爲,可以選擇操作classpath來包含/排除資源,但只有當您對存儲在classpath中的資源感興趣並使用Classloader.getResource(r)
引用它們時,此解決方案纔有效。但是如果你有一些外部配置,你想用簡單的指令來訪問它,比如File file = new File("app.properties");
?
讓我們看看普通的例子。
您的應用程序使用app.properties文件,您可以在其中存儲外部服務的憑據。應用程序在工作目錄中查找此文件,因爲您使用提到的File file = new File("app.properties");
指令來訪問它。在您的測試中,您希望使用app.properties特定於您的測試。在您的集成測試中,您希望使用特定於其他環境的app.properties。最後,當您構建併發布應用程序時,您希望提供其他app.properties文件。你想只通過鍵入File file = new File("app.properties");
代替(僞代碼)總是訪問同樣的方式,所有這些資源:
if(configTest)
file = File("testWorkDir/app.properties");
else if(config2)
file = File("config2WorkDir/app.properties");
else
file = File("app.properties");
或代替在類路徑中使用的資源
this.getClass.getClassLoader.getResource("app.properties");
當然你是聰明的程序員並且您使用構建工具,如maven,gradle或sbt :)
應該在一開始。至少該問題:
有沒有辦法在java中設置工作目錄,如果是的話,如何配置它在構建工具(特別是在SBT)?
附加信息:
- 改變 'user.dir來' 系統屬性不工作(我試圖programaticly改變它)。
- 在更改'working directory' via baseDirectory setting for test更改baseDirectory不是基本目錄在我的understangind中,它不等於
new java.io.File(".").getAbsolutePath
。 - 提供像YOUR_APP_HOME這樣的環境變量並從此路徑引用資源是可行的,但需要在代碼中記住這一點。