2012-11-29 60 views
9

我想能夠在特定的目錄下運行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這樣的環境變量並從此路徑引用資源是可行的,但需要在代碼中記住這一點。

回答

4

在SBT改變經由baseDirectory「工作目錄」設置測試改變baseDirectory這是不是在我的understangind基DIR和它不等於new java.io.File(".").getAbsolutePath

我不知道上述表態意味着,但SBT你需要用叉子叉runtest期間更改你的工作目錄。這在Enable forkingChange working directory中有記錄。