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



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

jar uf myfile.jar -C images hi.png

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

imageshi.png : no such file or directory

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

额外信息:我不能使用像WinRAR这样的东西,我必须用命令行来做。

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

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

jar uf myfile.jar imageshi.png

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

  1. 编辑文件:

    • 打开jar文件7-zip |打开存档
    • 转到/Meta-Inf/xyz.conf
    • 右键单击并选择"打开"选项
    • 编辑并保存文件
    • 关闭7-zip控制台,完成。
  2. 对于添加/替换/删除文件

    • 按照前两个步骤,直到你到达你想要的文件夹。
    • 删除:删除文件
    • 添加:将文件拖放到7-zip控制台。
    • 关闭控制台,完成。

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

您可以使用"jar"命令行提取您的文件并创建一个新的jar文件。

更多细节可以从如何替换jar文件中的图像中查看

# create a new folder
mkdir contents
# extract jar file
jar xf example-1.5.jar
# Then you'll get a list of new files from jar
ls
# update your images in it
# create a new jar
jar cf example-1.5.jar *

如果你想扩展Spring Boot应用程序(例如用于端到端测试目的),这一个为我工作:

Dockerfile部分:

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

Jar文件类似于zip文件。当您编辑一个zip文件时,vim将其解压缩,并允许您编辑zip文件中的文件。只需浏览文件并按enter键,您就可以编辑存档中的文件。

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

vim my.jar

最新更新