paw*_*icz 10 java file classpath sbt
我希望能够在特定目录中运行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");
Run Code Online (Sandbox Code Playgroud)
或者不使用类路径中的资源
this.getClass.getClassLoader.getResource("app.properties");
Run Code Online (Sandbox Code Playgroud)
当然,你是聪明的程序员,你使用构建工具,如maven,gradle或sbt :)
一开始就应该这样做.至少问题:
有没有办法在java中设置工作目录,如果是的话如何在构建工具中配置它(特别是在sbt中)?
附加信息:
new java.io.File(".").getAbsolutePath.在sbt通过baseDirectory设置更改'工作目录'进行测试更改baseDirectory,它不是我的understangind中的基础目录而且它不相等
new java.io.File(".").getAbsolutePath.
我不确定上面的语句是什么意思,但是对于sbt你需要在runor或者期间更改你的工作目录test.这在Enable forking和Change工作目录中有记录.
如果你 fork,你可以控制一切,包括工作目录。
http://www.scala-sbt.org/0.13.5/docs/Detailed-Topics/Forking.html
示例代码:
fork in run := true
baseDirectory in run := file("/path/to/working/directory/")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5576 次 |
| 最近记录: |