アプリケーション内で Jar ファイルに対してストリームを開いた後、配備解除や再配備が行えない (Windows のみ)

  • 説明
    \Windows システムで、アプリケーションを実行した後に、引き続きそのアプリケーションを配備取り消ししたり再配備すると、サーバーがファイルを消去出来ないとかディレクトリ名を変えられないといった例外がスローされます。
    \
    Windows システムでは、アプリケーションが getClass().getResourcegetResourceAsStream メソッドを使って、アプリケーションが入っていたりアクセスする jar ファイルの中にあるようなリソースを使うことがあります。もしストリームがオープンしっぱなしの場合、引き続きアプリケーションの配備取り消しや再配備を行うと失敗します。それに加えて、Java 実行環境は、パフォーマンス向上のため、デフォルトで Jar ファイルをキャッシュします。
  • 解決法
    \アプリケーションがオープンしたストリームを閉じてください。また、もし繰り返しアプリケーションを配備取り消ししたり再配備する必要があり、かつ getResourcegetResourceAsStream を使って Jar ファイルからリソースを取得する必要があるならば、URL オブジェクトを返す getClass().getResource を使い、そして url.setUseCaches メソッドを呼び出して jar ファイルのキャッシュをオフにし、それから url.getInputStream() を使ってストリームを取得してください。
    \Jar ファイルへのアクセスでキャッシュをオフにするとパフォーマンスが低下しますが、こうすることで、アプリケーションの配備取り消しや再配備を行えるようになります。getClass().getResourceAsStream メソッドを使っている場合は、jar ファイルはキャッシュされ(これは Java 実行時環境設定のデフォルトです)、サーバーが停止するまでオープンされ続けることに注意してください。
    \
    戻る

日本語翻訳: shioda

英文 (翻訳したバージョン: 104)