[toc]

本篇windowns环境下演示,Linux下同理

一、前言

如果在上线前打好的jar包,临时修改某个配置信息,没有时间重新打包,那怎么办呢?那请看下边的jar包替换流程。

二、jar命令详细

首先是在有java环境下

D:\works\svnwork\test>jar --help
非法选项: -
用法: 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包中的pom文件:META-INF/maven/com.zchjbz.support/zchjbz_common/pom.xml

1. 查看jar包下文件树结构

D:\works\svnwork\test>jar tf zchjbz_common-1.0-SNAPSHOT.jar
META-INF/
META-INF/MANIFEST.MF
com/
com/zchjbz/
com/zchjbz/support/
com/zchjbz/support/entities/
com/zchjbz/support/entities/CommonResult.class
com/zchjbz/support/entities/Payment.class
META-INF/maven/
META-INF/maven/com.zchjbz.support/
META-INF/maven/com.zchjbz.support/zchjbz_common/
META-INF/maven/com.zchjbz.support/zchjbz_common/pom.xml
META-INF/maven/com.zchjbz.support/zchjbz_common/pom.properties

2. 解压出pom文件

D:\works\svnwork\test>jar xf zchjbz_common-1.0-SNAPSHOT.jar META-INF/maven/com.zchjbz.support/zchjbz_common/pom.xml

jar包目录下,会出现解压的pom文件
image.png

3. 修改pom文件

根据自身需求,进行修改内容
比如:我在pom文件添加一行注释
image.png

4. 修改jar包中的pom文件

D:\works\svnwork\test>jar uf zchjbz_common-1.0-SNAPSHOT.jar META-INF/maven/com.zchjbz.support/zchjbz_common/pom.xml

5. 验证jar包是否已经修改

  1. 先删除上步解压的文件
    image.png

  2. 解压jar包
    image.png

  3. 查看pom文件内容
    image.png
    发现已经内容已经修改进jar包

Q.E.D.


只有创造,才是真正的享受,只有拚搏,才是充实的生活。