我希望能够在特定目录中运行 java 程序。我认为,参数化工作目录非常方便,因为它可以轻松管理配置。
例如,在一个文件夹中,您可以进行测试配置,在另一个文件夹中,您可以拥有生产所需的资源。您可能认为,可以选择操作类路径以包含/排除资源,但只有当您对存储在类路径中的资源感兴趣并使用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”系统属性不起作用(我尝试以编程方式更改它)。
- 在 sbt通过 baseDirectory 设置更改“工作目录”以进行测试更改 baseDirectory 在我的理解中它不是基本目录并且它不相等
new java.io.File(".").getAbsolutePath
。 - 提供像 YOUR_APP_HOME 这样的环境变量并从此路径引用资源是可行的,但需要在代码中记住这一点。