jar包的解压和重新打包

前言

遇到一个项目,乙方需要升级依赖版本,由于之前提供乙方的已经版本已经更新了,需要在现有的版本jar包上更新依赖。

方法

解压jar包

#解压esb.jar包
jar xvf esb.jar
#解压后有三个目录BOOT-INF/ META-INF/ org/
#删除现有esb.jar
rm -rf esb.jar
#进入依赖目录
cd BOOT-INF/lib
#删除fastjson-1.2.70.jar
rm -rf fastjson-1.2.70.jar 
#上传fastjson-1.2.83.jar
rz
#将所有文件重新压缩成esb.jar包
jar -cvfM0 esb.jar BOOT-INF/ META-INF/ org
#将重新打包的esb.jar放回原来目录

jar 命令详情

[admin@custmer-development-d ~]$ jar help
Illegal option: h
Usage: jar {
          
   ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
Options:
    -c  create new archive 
    -t  list table of contents for archive
    -x  extract named (or all) files from archive
    -u  update existing archive
    -v  generate verbose output on standard output  
    -f  specify archive file name
    -m  include manifest information from specified manifest file
    -n  perform Pack200 normalization after creating a new archive
    -e  specify application entry point for stand-alone application 
        bundled into an executable jar file
    -0  store only; use no ZIP compression
    -P  preserve leading / (absolute path) and ".." (parent directory) components from file names
    -M  do not create a manifest file for the entries
    -i  generate index information for the specified jar files
    -C  change to the specified directory and include the following file
If any file is a directory then it is processed recursively.
The manifest file name, the archive file name and the entry point name are
specified in the same order as the m, f and e flags.

Example 1: to archive two class files into an archive called classes.jar: 
       jar cvf classes.jar Foo.class Bar.class 
Example 2: use an existing manifest file mymanifest and archive all the
           files in the foo/ directory into classes.jar: 
       jar cvfm classes.jar mymanifest -C foo/ .

用法:jar {
          
   ctxui} [vfmn0PMe] [jar文件] [清单文件] [入口点] [-C目录]文件...
选项:
    -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解压失效的情况,这种情况可能是JDK版本问题,打包时的JDK和解压时的JDK版本不一样,需要保证打包和解压的JDK版本一直性,目前遇到过这种情况。实在不能解压的可以尝试使用360解压,然后再用360压缩(同事尝试时是可以的)。

经验分享 程序员 微信小程序 职场和发展