• war包内更新文件


    感谢@这个博客提供的分享

    亲测有效,原文:

    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
      已解压: 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%)
    
    
    
    附: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' 标记的指定顺序相同。
    
    
    示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中: 
           jar cvf classes.jar Foo.class Bar.class 
    示例 2: 使用现有的清单文件 'mymanifest' 并
               将 foo/ 目录中的所有文件归档到 'classes.jar' 中: 
           jar cvfm classes.jar mymanifest -C foo/ .
    
    注:jar后面使用选项时,可以带-也可以不带-,作用是一样的。
    View Code

    注意:看命令原文是Linux系统下的,有如下亮点:

    1第一步查找指定文件路径时grepwindows下可能会报‘grep不是内部或外部命令**云云’改用findstr就行

    2第三步覆盖文件时windows系统下的命令是move,不是cp

    示例:将zhangTest移动到war包下WEB-INFclassescontroller目录下进行替换

     

     移动之后多了个WEB-INF(第2步就已经解压出来),原zhangTest.class不见了,替换进了war包中

    可以看到war包中的时间变了

  • 相关阅读:
    [VC++入门]C++中常用的运算符及微软自定义类型
    搜索引擎蜘蛛爬虫原理
    Enterprise Library 5.0
    Installshield 12 中文系列教程之 定义安装必要条件
    installshield脚本
    c# 事物处理
    InStallShield网络资源参考
    Could not execute query against OLE DB provider 'OraOLEDB.Oracle'
    frameset小结
    最痛心的距离
  • 原文地址:https://www.cnblogs.com/yanan7890/p/9572757.html
Copyright © 2020-2023  润新知