gpt4 book ai didi

java - 使用 jar 命令更新特定目录中 JAR 中的文件

转载 作者:IT老高 更新时间:2023-10-28 21:07:59 24 4
gpt4 key购买 nike

所以我一直在寻找这个问题的答案,但显然没有找到满意的答案。

问题是我想在 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 

(我知道这种语法行不通,只是为了举例说明我需要什么)。

这可以吗?当 jar 命令可以找到与之匹配的东西时,我绝对需要模仿整个文件夹结构,这让我觉得很奇怪,因为我可能需要更新一个文件100 个文件夹深的文件夹结构。仅仅为了更新文件而重现过于复杂。

另外,我知道可以使用常规的 ZIP 实用程序,但我在 Linux 中可用的那个没有更新文件,即使它说它更新了(重新打开 jar 后,旧版本完好无损),而现在我不能去寻找另一个(公司政策,没有时间,测试问题,你说的)。

最后,如果我可以从命令行执行此操作,这意味着我可以创建一个批处理文件来更新大量特定文件,而无需创建文件夹结构。

我忘了说我也想避免解压缩、更新、重新压缩整个东西,因为这个 JAR 可以上升到 2GB,所以这样做需要一段时间,基本上,添加一点资源文件到我的巨大 JAR。

非常感谢您对此的任何帮助!

最佳答案

正如接受的答案已经指出的那样,您既不能使用 zip 也不能使用 jar 命令插入 特定文件文件系统到压缩文件里面的特定目录。

但是有这个workaround,简单来说就是先提取压缩文件里面的一个特定文件,你可以更新它,然后再放回压缩文件中:

1.提取单个文件:
考虑一个包含以下内容的 jar

$ jar tvf foo.jar 
0 Thu Jan 10 00:05:06 IST 2013 META-INF/
68 Thu Jan 10 00:05:06 IST 2013 META-INF/MANIFEST.MF
0 Thu Jan 10 00:04:30 IST 2013 x/
0 Thu Jan 10 00:07:36 IST 2013 x/b/
9 Thu Jan 10 00:07:36 IST 2013 x/b/hello.txt
0 Thu Jan 10 00:04:30 IST 2013 x/a/

要仅提取 hello.txt,您必须提供要提取的文件的完全限定路径。 Jar 也会创建适当的文件夹。

例子:

$ jar xvf foo.jar x/b/hello.txt
inflated: x/b/hello.txt

$ tree x/
x
└── b
└── hello.txt
1 directory, 1 file

<强>2。更新单个文件

  1. 修改解压文件
  2. 使用 'u' 标志更新 jar。提供展开的目录根目录,jar 应更新其下的所有路径元素。

例子:

$ jar vfu foo.jar x/
adding: x/(in = 0) (out= 0)(stored 0%)
adding: x/b/(in = 0) (out= 0)(stored 0%)
adding: x/b/hello.txt(in = 23) (out= 11)(deflated 52%)

3.我用哪个版本的 jar 试过这个?

我在 Fedora 17 上使用了与 JDK 7 捆绑的 jar


我已经验证了这里提到的所有步骤。希望这会有所帮助。

关于java - 使用 jar 命令更新特定目录中 JAR 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13729647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com