だから私はこれに対する答えを探していましたが、明らかに満足のいく答えは見つかりませんでした。
問題は、JAR(またはそのことについては任意のファイル)をJAR内で更新したいのですが、そのファイルはフォルダー構造内にあるため、更新できるようにJAR外での複製は避けたいと考えています。
例:
Foo.jar (root directory)
/
|->/folder1
|
|->/folder2
|
|->/foo
|
|-->/bar
|
|---->/baz
|
|------>file_to_update.jar
したがって、jarコマンドを使用してこれを更新する場合は、最初にJARの外部に同じフォルダー構造を作成してから、
jar -uf Foo.jar -C foo/bar/baz/file_to_update.jar
ただし、特定のファイルでは非常に深くなる可能性があり、コンテナJAR全体で選択したファイルを更新する必要がある可能性があるため、このフォルダ構造の作成は避けたいので、特定の構造だけで多くのフォルダを作成したくありません。したがって、jarコマンドでそれらを更新できます。
別の言い方をすれば、jarコマンドに、特定のソースディレクトリ内の特定のソースファイルを使用して、特定の宛先ディレクトリ内の特定の宛先ファイルを更新するように指示したいと思います。
つまり、
jar -uf Foo.jar -sourceFile /x/y/z/filetoupdate -destFile /a/b/c/filetoupdate
(この構文が機能しないことはわかっています。必要なものを例示するだけです)。
これはできますか?100フォルダーの深さのフォルダー構造内のファイルを更新する必要がある可能性があるため、 jarコマンドが一致するものを見つけることができたときに、フォルダー構造全体を完全に模倣する必要があるのは非常に奇妙なことです。 。これは、ファイルを更新するためだけに再現するには非常に複雑です。
また、通常のZIPユーティリティを使用できることは知っていますが、Linuxで使用できるユーティリティは、ファイルを更新したと表示されていても更新されていません(jarを再度開くと、古いバージョンはそのままです)。私は別のものを探しに行くことができません(会社の方針、時間なし、テストの問題、あなたはそれに名前を付けます)。
最後に、コマンドラインからこれを実行できる場合は、フォルダー構造を作成しなくても、バッチファイルを作成して多くの特定のファイルを更新できることを意味します。
このJARは2GBまで増加する可能性があるため、基本的に小さなリソースファイルを追加するためだけにこれを行うには時間がかかるため、全体を解凍、更新、再jarする必要も避けたいと言うのを忘れました。巨大なJAR。
これに関するどんな助けも大歓迎です!