天天看点

替换jar包文件

文章目录

  • ​​01 引言​​
  • ​​02 操作演示​​
  • ​​03 命令总结​​
  • ​​04 文末​​

01 引言

有时候,我们需要在线上把某个jar包里面的某一个class文件替换,一般需要重新打包。

其实jdk里面自带了工具类,无需重新打包,使用命令就可以进行jar包里面的文件替换了。这个工具类的名称为“​

​jar​

​”,本文来讲讲。

02 操作演示

举例:替换flink-connector-jdbc_2.11-1.13.6.jar包里面的JdbcDynamicTableFactory.class文件。

工具:​

​jdk​

​​安装包里面​

​bin​

​​目录下的​

​jar​

替换jar包文件

首先查询我们要替换的jar文件所处用于jar包的位置,命令如下:

jar -tvf flink-connector-jdbc_2.11-1.13.6.jar |grep JdbcDynamicTableFactory      
替换jar包文件

解压路径的文件到本地:

jar -xvf flink-connector-jdbc_2.11-1.13.6.jar org/apache/flink/connector/jdbc/table/JdbcDynamicTableFactory.class      
替换jar包文件

使用cp或者mv命令替换解压出来目录的文件class文件:

cp JdbcDynamicTableFactory.class org/apache/flink/connector/jdbc/table/JdbcDynamicTableFactory.class      

替换成功之后,再把它压缩回去:

jar -uvf flink-connector-jdbc_2.11-1.13.6.jar org/apache/flink/connector/jdbc/table/JdbcDynamicTableFactory.class      
替换jar包文件

ok,就这样我们就做到使用jar命令来替换jar包里面的class文件了。

03 命令总结

从上述的实操中,可以知道有几个命令:

① 查询替换文件的路径:

jar -tvf jar包名称 |grep 替换的文件名      

② 解压需要替换的文件到当前目录:

jar -xvf jar包名称 文件在jar包中的全路径名      

③压缩修改的文件:

jar -uvf jar包名称 文件在jar包中的全路径名      
$ 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/ .      

04 文末