Java替换jar包中class文件的完整步骤记录

 更新时间:2025年05月07日 10:27:55   作者:bjzhang75  
这篇文章主要介绍了Java替换jar包中class文件的完整步骤,通过替换修改后的Java类的class文件来更新java应用版本,文中通过图文介绍的非常详细,需要的朋友可以参考下

在更新java应用版本的运维工作中,由于一些原因,开发没办法给到完整的jar包,这个时候,就可以只将修改后的某个Java类的class文件替换掉原来iar包中的class文件,重新启动服务即可:

1、将jar包和将要替换的class文件放到同一个目录下;

2、查找jar包中xxxdemo.class文件所在的具体路径

jar -tvf xxx.jar | grep xxx.class

3、将xxx.jar中指定的xxx.class解压出来

jar -xvf xxx.jar  xxx/xxx/xxx/xxx/xxx/xxx.class(路径为第2步的路径结果)

4、将新的xxx.class文件放到第3步的路径下(替换前备份原文件)

这里更换名字的方法模拟这一步,实际生产环境操作按需要放进新的文件

5、重新打包jar

jar -uvf  xxx.jar xxx/xxx/xxx/xxx/xxx/xxx.class(路径为第2步的路径结果)

查看jar包里的文件已经是新文件(如果是一样名字的会被覆盖处理):

6、重启使用该jar包应用(如有需要)。

7、替换jar包中的jar文件

前2个查找查找步骤同上,最后一步略有不同。如:

jar -uvf0 abc.jar BOOT-INF/lib/a.jar
##使用的是-uvf0而是不是-uvf

附:jar包如何使用命令替换class文件

话不多说,直接上命令:

# 1.检索文件
jar -tvf Test-0.0.1-SNAPSHOT.jar | grep Test.class
# 2.取出文件
jar -xvf Test-0.0.1-SNAPSHOT.jar BOOT-INF/classes/com/test/Test.class
#3.替换文件
mv Test.class BOOT-INF/classes/com/test/Test.class
#4.打入jar包
jar -uvf Test-0.0.1-SNAPSHOT.jar BOOT-INF/classes/com/test/Test.class
#5.删除冗余文件
rm -r BOOT-INF

脚本文件:

updateClass.sh

#!/bin/bash
# 动态部署class脚本

className=`ls|grep .class$`
jarName=`ls|grep .jar$`	

if [ -z $className ]
then
    echo "No class file found."
    exit 1
fi

if [ -z $jarName ]
then
    echo "No jar file found."
    exit 1
fi

echo "The $className is replacing..."

fullPath=`jar -tvf $jarName | grep "/$className" | awk '{print $NF}'`

jar -xvf $jarName $fullPath
mv $className $fullPath
jar -uvf $jarName $fullPath
rm -r BOOT-INF

总结

到此这篇关于Java替换jar包中class文件的文章就介绍到这了,更多相关Java替换jar包class文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java内存分布归纳整理详解

    Java内存分布归纳整理详解

    这篇文章主要介绍了java程序运行时内存分布详解,需要的朋友可以参考下
    2017-04-04
  • java Long类型转为json后数据损失精度的处理方式

    java Long类型转为json后数据损失精度的处理方式

    这篇文章主要介绍了java Long类型转为json后数据损失精度的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • java必懂的冷知识点之Base64加密与解密

    java必懂的冷知识点之Base64加密与解密

    这篇文章主要介绍了java必懂的冷知识点之Base64加密与解密的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 使用FormData上传二进制文件、对象、对象数组方式

    使用FormData上传二进制文件、对象、对象数组方式

    这篇文章主要介绍了使用FormData上传二进制文件、对象、对象数组方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 关于Java中配置ElasticSearch集群环境账号密码的问题

    关于Java中配置ElasticSearch集群环境账号密码的问题

    这篇文章主要介绍了Java中配置ElasticSearch集群环境账号密码的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Spring循环依赖实例详解

    Spring循环依赖实例详解

    Spring循环依赖是指两个或多个Bean相互依赖,形成闭环,Spring通过巧妙的机制(如三级缓存)默认支持setter注入的循环依赖,但不支持constructor注入的循环依赖(会抛异常),本文介绍spring循环依赖的相关操作,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • Java递归调用如何实现数字的逆序输出方式

    Java递归调用如何实现数字的逆序输出方式

    这篇文章主要介绍了Java递归调用如何实现数字的逆序输出方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java中实现Unicode编码解码的方法

    Java中实现Unicode编码解码的方法

    在Java编程中,Unicode编码解码是一项基本的操作,Unicode是一种用于表示文字字符的标准编码,它包含了世界上几乎所有的字符,包括各种语言的字母、符号和表情符号等,在Java中通过Unicode编码,我们可以将任意字符转换为字节流进行传输和存储
    2024-02-02
  • Java中的异常处理机制try-catch详解

    Java中的异常处理机制try-catch详解

    这篇文章主要介绍了Java中的异常处理机制try-catch详解,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • 五分钟手撸一个Spring容器(萌芽版)

    五分钟手撸一个Spring容器(萌芽版)

    Spring的两大内核分别是IOC和AOP,其中最最核心的是IOC。这篇文章主要介绍了五分钟,手撸一个Spring容器的相关知识,需要的朋友可以参考下
    2022-03-03

最新评论