本来,想用jar命令来快速替换war包的文件的,但是,发现Ubuntu中没有装Java,懒癌发作,遂使用zip与unzip命令代替。



zip:压缩命令

格式: zip    [-选项]    *.war    要压缩的文件   例子: zip  -m  app.war   /WEB-INF/classes/com/app/business/service/platform/impl/abc.class

选项:

-m: 不检查而替换原有文件。网上解释:将文件压缩而加入压缩文件后,删除原有文件。即把文件移动到压缩文件中。



unzip:解压命令

格式: unzip    [-选项]    *.war    要解压的文件   例子: unzip  -o  app.war   WEB-INF/classes/com/app/business/service/platform/impl/abc.class  

                                                                            --->  unzip   app.war   WEB-INF/classes/com/app/business/service/platform/impl/abc.class

选项:

-l  (list): 不解压而查看war包中的文件

-v        : 执行是时显示详细的信息

-f  (fresh): 覆盖原有文件

-o  (overwrite): 强制覆盖,不提示是否覆盖

-u  (update): 已有的,覆盖;未有的,新建

-n  (never): 不覆盖已有文件



包:app.war

要替换的文件:/WEB-INF/classes/com/app/business/service/platform/impl/abc.class


步骤:(颜色为命令,非颜色为结果)

1. 使用unzip、grep命令将war包中要替换的文件先找出来,将路径一并解压出来

    a. unzip -l app.war |grep abc.class     --->   unzip -v app.war |grep abc.class    /   unzip -lv app.war |grep abc.class 

        49974  2019-08-02 02:28   WEB-INF/classes/com/app/business/service/platform/impl/abc.class


    b. unzip   app.war   WEB-INF/classes/com/app/business/service/platform/impl/abc.class

        Archive:  app.war

          inflating: WEB-INF/classes/com/app/business/service/platform/impl/abc.class


2. 使用move/cp命令将新文件替换解压出来的旧文件

    cp   abc.class    WEB-INF/classes/com/app/business/service/platform/impl/


3. 使用zip命令将路径下的新文件打包入war包

    zip   -m  app.war   WEB-INF/classes/com/app/business/service/platform/impl/abc.class

    updating: WEB-INF/classes/com/tmri/rural/business/service/platform/impl/AbstractBusinessEntityManagementServiceImpl.class (deflated 60%)


当然,还可以使用md5sum命令验证文件的是否更改。