0

でMacアプリMyApp.appを作りましたJar Bundlerlib/AutoUpdate.jarと同じフォルダ パスにある外部 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()

4

1 に答える 1

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

次のコードでは、アプリが存在するかどうかを 1 時間ごとに確認し、実行している場合は毎日更新を試みます。

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;
于 2013-08-07T23:13:21.540 に答える