如何在不重新打包整个jar的情况下更新jar中的一个文件?

时间:2011-12-11 01:49:20

标签: java jar

我有一个名为myfile.jar的.jar文件。在这个jar文件里面是一个名为images的文件夹。在这个名为images的文件夹中,我有一个名为hi.png的图像。我想用该图像的新版本更新该图像,也称为hi.png。我不想从单个jar文件中提取所有文件然后重新打包它们,我只是想更新图像。所以,我像往常一样去命令行,键入几行代码,然后我执行以下命令:

jar uf myfile.jar -C images hi.png

我希望用这个命令做的是用新的hi.png替换旧的hi.png。但是,它给了我这个错误:

images\hi.png : no such file or directory

我该怎么做才能解决这个问题?

额外信息:我不能使用类似WinRAR的东西,我必须使用命令行执行此操作。

5 个答案:

答案 0 :(得分:25)

-C正在更改本地目录,并在那里寻找hi.png。它无法控制您将其注入JAR文件的位置。

我会尝试创建一个名为images的新目录,将本地hi.png移动到该目录中,使images成为当前工作目录的子目录,然后运行:

jar uf myfile.jar images\hi.png

答案 1 :(得分:7)

最简单的方法是使用 7-zip 软件。对于

  1. 编辑文件:

    • 打开jar文件7-zip |开放存档
    • 转到文件,例如/Meta-Inf/xyz.conf
    • 单击鼠标右键,然后选择“中打开”选项
    • 编辑文件并保存文件
    • 关闭7-zip控制台,就完成了。
  2. 添加/替换/删除文件。

    • 按照前两步操作,直到找到所需的文件夹。
    • 删除:删除文件
    • 添加:将文件拖放到7-zip控制台。
    • 关闭控制台并完成。

答案 2 :(得分:3)

您可以使用jar -uf sample.jar [path in jar file]target-file

答案 3 :(得分:0)

如果您想扩展Spring Boot App(例如出于e2e测试目的),那么这个对我有用:

Dockerfile的一部分:

COPY ./libs/*.jar /BOOT-INF/lib/
RUN jar u0f /app.jar /BOOT-INF/lib/*.jar

答案 4 :(得分:-1)

如果您想编辑文本文件,可以直接使用vim完成。

(假设您有unzip可用,例如CentOS上的yum install -y unzip

vim my.jar