我正在尝试将Java应用程序编译为Mac OS X应用程序包。我添加以下设置来设置当前工作目录:
<bundleapp...>
...
<option value="-Duser.dir=$APP_ROOT/Contents/Resources"/>
</bundleapp>
在Contents / Resources /中有一个配置目录。
执行时,我会遇到这种奇怪的行为:
new File("config/").exists()
返回false
new File("config/").getAbsolutePath()
返回/path/to/bundled/app/MyApp.app/Contents/Resources/config
new File("config/").getAbsoluteFile().exists()
返回true
我不知道为什么会这样,我想阻止在我的代码中到处添加getAbsoluteFile()。
对此有何想法?
(注意:我使用的是Oracle JDK 8)
答案 0 :(得分:1)
getAbsolutePath
解析当前user.dir
属性的相对路径。来自javadocs:
在UNIX系统上,通过解析相对路径名使其成为绝对路径名 针对当前用户目录。
虽然javadocs说明了
默认情况下,java.io包中的类总是解析相对的 针对当前用户目录的路径名。该目录已命名 由系统属性user.dir,通常是在中的目录 调用了Java虚拟机。
this bug report表示&#34;更简单&#34;吸气剂(不是&#34;绝对&#34;) 相对路径将解决 调用虚拟机的路径。