我用Jar Bundler
做了一个Mac应用程序MyApp.app
。因为我有一个外部 jar,lib/AutoUpdate.jar
与MyApp.app
位于同一文件夹路径中,我需要MyApp.app
的当前路径才能运行自动更新。显然地:
System.getProperty("user.dir");
剂量不起作用。我也试过:
String path = System.getProperty("user.dir");
if(path.contains("/MyApp.app")){
int i = path.indexOf("/MyApp.app");
path = path.substring(0,i);
}
但这似乎也是MyApp.app
的错误路径.任何想法如何获得正确的路径,或者我是否可以至少调试MyApp.app
以获取System.out.println()
命令的视图?
如果位置在给定区域中,请尝试Applications/MyApp.app
位置,或者您可以使用Unix命令在所需目录处启动jar(而不是将其硬编码到.jar
文件中(。
-x
用于可执行文件,但应用程序通常也可以使用 -d
并且都使用 -e
命令。
要实现,请将AutoUpdater.jar
与其他.jar文件放在 MyApp.app/contents/resources/java
中。AutoUpdater.jar
应如下所示:
main()
{
if [ -x Applications/MyApp.app];then
cd Applications/MyApp.app/contents/resources/java
java AutoUpdater.jar
wait 86400
main
else
wait 3600
fi
}
main
下一段代码将尝试查看应用是否每小时存在一次,如果保持运行状态,则每天更新。
download()
{
cd Applications/MyApp.app/contents/resources/java
if ! curl -LO http://your.url.that.it.is.updating.from;then
echo "Failed to download"
wait 3600
else
wait 86400
fi
}
您可以通过将其添加到最后一行之前的代码中来完全删除AutoUpdate.jar
。替换此内容:
java AutoUpdater.jar
wait 86400
。有了这个:
download
这仅适用于JarBundler
应用程序。您应该使用它来替换当前.jar文件。
if ! curl -LO http://cbukk.it/craftbukkit-dev.jar;
作为旁注,命令user.dir
通常/Users/yourName
为路径。您可以更改此设置以在JarBundler
中使用全局标识符,如下所示:
String path = com.mycommpany.myapp;