文章目录
- 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 -tvf flink-connector-jdbc_2.11-1.13.6.jar |grep JdbcDynamicTableFactory
解压路径的文件到本地:
jar -xvf flink-connector-jdbc_2.11-1.13.6.jar org/apache/flink/connector/jdbc/table/JdbcDynamicTableFactory.class
使用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
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/ .