如何更新war包内文件


转载链接,若侵删
https://www.cnblogs.com/yanan7890/p/9572757.html


1.情况一:替换的文件直接在war包的根目录(一级目录)下

如:直接使用jar uvf命令替换即可 替换a.war中b.xml文件

jar uvf a.war b.xml

注:b.xml需要和a.war在同一个目录下。

2.情况二:替换的文件在war包的二级及以下目录

需要以下步骤

  • (1)使用jar tvf war名称 | grep 目标文件名 查询出目标文件在war包中的目录

  • (2)使用jar xvf war名称 目标文件名(copy上面查出的全路径) 将目标文件及所在war包中的目录解压到当前路径

  • (3)修改目标文件的内容,或者将要新的目标文件替换掉提取出来的目标文件

  • (4)使用jar uvf war名称 目标文件名(和步骤(2)中的目标文件名相同) 将新目标文件替换到war包中

举例:替换opp.war包中的opp.properties文件

(1)# jar -tvf opp.war |grep opp.properties
  6322 Thu Sep 29 12:29:16 CST 2016 WEB-INF/classes/opp.properties

(2)# jar -xvf opp.war WEB-INF/classes/opp.properties
   #ll
  -rw-r--r--. 1 opp  opp       4426 8月  20 10:43 opp.properties #新的opp.properties文件
  -rw-rw-r--. 1 opp  opp  114896942 10月 12 09:48 opp.war

  drwxr-xr-x. 3 root root        20 12月 28 10:29 WEB-INF #解压出来的opp.proerties文件(连带目录结构也解压出来了)

(3)# cp opp.properties WEB-INF/classes/ 
  cp:是否覆盖"WEB-INF/classes/opp.properties"yes

(4)# jar -uvf opp.war WEB-INF/classes/opp.properties
  正在添加: WEB-INF/classes/opp.properties(输入 = 4426) (输出 = 1892)(压缩了 57%)

3.如果是window下需要注意

  • 1、第一步查找指定文件路径时grep,windows环境下需改用findstr

  • 2、第三步覆盖文件时windows环境下的命令是move,不是cp

在这里插入图片描述

附:jar的用法:

用法: jar {
    
    ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
    -c  创建新档案
    -t  列出档案目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有档案
    -v  在标准输出中生成详细输出
    -f  指定档案文件名
    -m  包含指定清单文件中的清单信息
    -n  创建新档案后执行 Pack200 规范化
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩
    -P  保留文件名中的前导 '/' (绝对路径)  ".." (父目录) 组件
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
 'm', 'f'  'e' 标记的指定顺序相同。

猜你喜欢

转载自blog.csdn.net/qq_39900031/article/details/113659073