2009-09-07 7 views
9

私はデスクトップのSwingアプリケーションを開発しました。自動更新機能を提供するための最良の方法について考えています。 私はJavaWebStartがこれを提供していることを知っていますが、私はJarファイルに署名する必要があるので、ローカルファイルを読む必要があるため、私のニーズに合わないと思います。さらに、JWSはサーバーに展開するために余分な作業を必要としますが、現在は.jarをアップロードするだけです。Java Swingデスクトップの自動更新機能App

私は、このアプローチについて考えてきた:

  • (更新する必要はありません)最初のJARは、スプラッシュスクリーンをロードconfig.xmlで現在のバージョンを確認し、サーバーの設定と比較します。 xml。

  • サーバーのバージョンが新しい場合は、更新するかどうかをユーザーに確認してください。その場合は、新しい "main.jar"、新しい "config.xml"と新しいスプラッシュ/アイコンをダウンロードし、MD5SUMをチェックし、古いファイルを新しいものに置き換えてください。

  • "main.jar"を起動します。

私は車輪を再発明しようとしている場合、または上記のものより良いパターンがある場合は、私は分かりません。

+3

あなたは車輪を革新しています。あなたはJava WebStartについて言及しているので、すでに知っています。サーバー上の配置は最小限で、ファイルをいくつか投稿するだけで、サーバー上にアクティブなコンポーネントは必要ありません。 –

+0

httpsからのハッシュをチェックするのではなく、証明書を使うことをお勧めします。ハッシュ技術では、httpsサーバーが侵害されたとは、すべての自動更新クライアントを危険にさらすことを意味します。 /さらに、ダウングレード攻撃を避けるために最新のバージョンをインストールしていることを確認してください。/WebStartは、ファイルブラウザの制御/カスタマイズは制限されていますが、ファイルの使用に限られたインターフェイスを提供します。 –

+0

私はそれがとても小さいとは思わない。私はそれが私によって制御されていないサーバーにまったく展開する必要があります。私は、例えば、ミメテイプを変更することはできません。私が言ったように、ローカルファイルにアクセスする必要があるので、私はそれに署名する必要があります。 – ktulur

答えて

5

同様のことをしました。 https経由でダウンロードしてjarファイルをダウンロードしました。新しいものが必要かどうかを知るために、ストリームのサイズを確認するだけです。理論的にはうまくいかないかもしれませんが、実際にはそうしました。 jarファイルのディレクトリリストを取得し、解析して各jarファイルをダウンロードすることで、jarファイルの名前もハードコーディングされていないことにもなります。しかし、いくつかの醜い点があります。

最初に新しいjvmプロセスを起動して新しいjarを起動するのは簡単ではありません。

第2に、更新が途中で失敗した場合には、あなたのjarファイルが破損していないことを確認する必要があります。

最後に、このプロセスでブートストラップ用のjarファイルを更新する方法はありません。

+0

誰かがそれを行う方法の例を探している場合、私は最後の数日にわたってそれをかなり構築しました:https://github.com/UrsKR/updates-r-simple –