2013-06-30 53 views
0

我制作了一个Mac应用程序MyApp.appJar Bundler。因为我有一个外部jar,lib/AutoUpdate.jarMyApp.app位于同一文件夹路径中,所以我需要MyApp.app的当前路径能够运行自动更新。 显然:在Mac上获取java bundler的路径

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()命令的视图?

+0

对于部署Java桌面应用程序,最好的选择通常是安装应用程序。使用[Java Web Start](http://stackoverflow.com/tags/java-web-start/info)。 JWS适用于Windows,OS X和* nix。 –

回答

0

尝试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;