3

操作に基づいて、jar 内のプロパティ ファイルを変更するアプリケーションを作成しました。

更新された変更で新しい一時 jar を作成できます。ただし、jar ファイルの名前を既存の jar ファイル名に変更することはできません。実行中のため、削除して名前を変更することはできません。

jar (現在実行中) を削除し、一時 jar の名前をその名前に変更するための操作または提案を提案できますか?

私はアプリケーションのためにやっています: http://java.net/projects_tags/jeazyprops

4

3 に答える 3

3

あなたの問題は、ClassLoaderJava 1.7より前が使用するデフォルトです-ロードするjarをロックし、実行が完了するまでjarを解放しません。最も簡単な解決策は、この問題を解決する Java 1.7 を使用することです。それ以外の場合は、独自のカスタムClassLoader(ug) を作成できます。デフォルトClassLoader: http://docs.oracle.com/javase/6/docs/api/java/net/URLClassLoader.html

編集

そして、Java 1.7で修正したというOracleからのメモがあります: http://openjdk.java.net/projects/jdk7/features/#f584

于 2012-10-05T18:03:28.293 に答える
1

プログラム内から実行しているjarを置き換える可能性はありません。
推奨されるアプローチ。
既存のアプリケーションを起動するだけの単純なクラスで新しい jar を作成します。起動する前に、 が存在するかどうかを確認し、temp.jar存在する場合はオリジナルを削除して名前temp.jarをオリジナルに変更する必要があります。を作成した後、アプリケーションで、temp.jarを使用してランチャー クラスを起動しRuntime.exec、終了します。アプリは新しい jar で再起動します。

于 2012-10-05T18:03:33.887 に答える
1

jar のロード/アンロードを可能にするカスタム クラス ローダー (ClassLoader を拡張する) を作成する必要があるかもしれません。jar をアンロードできる場合は、jar を削除できるはずです。

便利なリンク http://docs.oracle.com/javase/tutorial/deployment/jar/jarclassloader.html

(同じ他のバージョンの) JAR を動的にアンロードおよび再ロードできますか?

于 2012-10-05T18:00:45.937 に答える