2012-11-29 57 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中有记录。