如何使用jar命令替换war中的文件?

 

问你一个问题:这里有一个war包,如果要更新其中的一个文件,你会怎么做?

 

解压,替换,重新压缩?

 

接下来的部分,提供给你一个更加简单、方便、有效的方法。

 

没错,使用jdk工具包中的jar命令,直接对war包中的文件进行替换。下面是一个示例,演示给你看,如何一步一步的通过jar命令,实现对war包中的某个文件进行替换:

 

首先,用一个演示的war,这里是jenkins.war

[root@nctest-snap-test-02 practises]# ls
jenkins.war

 

1、列出war中的内容

 

先看下jenkins.war中的内容:

jar -tvf jenkins.war

 

选择一个war中的文件,比如:txt文件:

[root@nctest-snap-test-02 practises]# jar -tvf jenkins.war | grep combobox-readme
  1392 Wed Jul 28 14:13:10 CST 2021 scripts/combobox-readme.txt
[root@nctest-snap-test-02 practises]# 

文件大小,1392字节。

 

2、提取某个war包中的文件

 

选好这个文件之后,我们把它提取到本地

[root@nctest-snap-test-02 practises]# jar -xvf jenkins.war scripts/combobox-readme.txt
 inflated: scripts/combobox-readme.txt
[root@nctest-snap-test-02 practises]# ls -l
total 72520
-rw-r--r-- 1 root root 74258876 Jul 29  2021 jenkins.war
drwxr-xr-x 2 root root       33 Aug 16 10:59 scripts
[root@nctest-snap-test-02 practises]# ls -l scripts/
total 4
-rw-r--r-- 1 root root 1392 Jul 28  2021 combobox-readme.txt
[root@nctest-snap-test-02 practises]# 

 

OK,文件已经成功提取到本地了。

 

接下来,修改这个文件······

 

#在文件的结尾加上1行
[root@nctest-snap-test-02 scripts]# tail -n 1 combobox-readme.txt 
# For Test #1


#文件的大小由1392增加到1407
[root@nctest-snap-test-02 scripts]# ls -l combobox-readme.txt 
-rw-r--r-- 1 root root 1407 Aug 16 11:00 combobox-readme.txt
[root@nctest-snap-test-02 scripts]# 

 

3、更新war中的某个文件

 

原材料有了,现在,就展示下,怎么用这个去替换war包中的同位置、同名的文件

 

方法非常的简单······

 

jar -uvf jenkins.war scripts/combobox-readme.txt

 

看命令是执行成功了,那到底有没有真的替换成功呢?

 

验证下不就知道了

[root@nctest-snap-test-02 practises]# jar -tvf jenkins.war | grep combobox-readme
  1407 Tue Aug 16 11:00:24 CST 2022 scripts/combobox-readme.txt
[root@nctest-snap-test-02 practises]# 

war包中的这个文件,确实替换成功了,文件的大小已经发生了变化。当然······你可以再次提出这个文件进行内容的验证。

 

OK,到这里,你是不是对使用jar命令,替换war包中某个文件的过程已经清晰了呢?

 

4、向war包中增加文件

 

你现在是不是又有一个疑问了,那要增加一个war中原来没有的文件,该怎么办?

 

非常的简单。

 

创建一个测试文件(注意,这个文件在war中可是没有的)

[root@nctest-snap-test-02 practises]# mkdir test01
[root@nctest-snap-test-02 practises]# touch test01/test01.txt
[root@nctest-snap-test-02 practises]# echo test >> test01/test01.txt

 

还是使用更新命令

jar -uvf jenkins.war test01/test01.txt

 

到底有没有,增加文件、目录成功?

 

[root@nctest-snap-test-02 practises]# jar -tvf jenkins.war | grep test01
     5 Tue Aug 16 11:08:38 CST 2022 test01/test01.txt
[root@nctest-snap-test-02 practises]# 

 

你还怀疑吗?事实让你眼见为实。

 

当然,你可以加入其他的文件,只要注意:在war包中的什么位置加文件,文件在本地就放在什么路径上。直接和war同级目录的,就是war中的根目录。

 

一份免费报告
揭示怎样仅仅通过阅读文章,就能每天赚到5000元现金!
该报告100%免费
所有你需要做的是,添加下面的微信,备注"免费报告"
 
 
image
posted @ 2022-08-16 11:14  Zhai_David  阅读(944)  评论(0编辑  收藏  举报