我有一个java应用程序并将其捆绑为App.jar
。我使用了一些第三方工具(我们称之为NumberGenerator
)。 App.jar
启动一个进程并调用NumberGenerator
来获取输出。为了引用可执行文件,我使用了相对路径new File("lib/NumberGenerator.exe")
,它运行良好。
现在在Mac上,我使用this捆绑了应用程序,它会自动生成应用程序启动器。当我通过单击启动器运行时,它会启动应用程序。但它将主目录设置为~
,即/Users/Jatin
,而不是jar文件所在的位置。因此我的应用程序无法检测lib
文件夹(显然因为它不在该位置)
在我的Java代码中,如何将主文件夹设置为jar
所在的位置?
答案 0 :(得分:2)
我遇到类似linux的问题。我不太了解osx而不是AppBundler,但在linux中我通过创建这个脚本来解决它
#!/usr/bin/env sh
java -Duser.dir=$(pwd) -jar myapp.jar
如果您设法通过双击运行脚本,它可能会有效...请参阅How to run a shell script in OS X by double-clicking?
答案 1 :(得分:2)
return new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
答案 2 :(得分:1)
我看到两种方法:
在Info.plist
中,指定与java.library.path
相对的$JAVAROOT
,如文章引用here中所述。
<key>Java</key>
<dict>
...
<key>Properties</key>
<dict>
<key>java.library.path</key>
<string>$JAVAROOT/</string>
</dict>
...
</dict>
使用Java Web Start,可让您按操作系统和体系结构管理本机resources。
答案 3 :(得分:0)
你可以试试这个:
System.setProperty("user.home", "your-dir");