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文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决mybatis三表连接查询数据重复的问题

    解决mybatis三表连接查询数据重复的问题

    这篇文章主要介绍了解决mybatis三表连接查询数据重复的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • SpringBoot中webSocket实现即时聊天

    SpringBoot中webSocket实现即时聊天

    这篇文章主要介绍了SpringBoot中webSocket实现即时聊天,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java文件与IO流操作原理详细分析

    Java文件与IO流操作原理详细分析

    在java中提供有对于文件操作系统的支持,这个支持在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创建,删除,重命名)有关的类,而如果想要进行File类的操作,我们需要提供有完整的路径支持,而后可以调用相应的方法进行处理
    2022-09-09
  • 使用Feign调用注解组件(实现字段赋值功能)

    使用Feign调用注解组件(实现字段赋值功能)

    这篇文章主要介绍了使用Feign调用注解组件(实现字段赋值功能),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • IDEA高效查看源码的快捷键及小技巧

    IDEA高效查看源码的快捷键及小技巧

    本篇文章这一部分的内容主要为大家介绍了一些平时看源码的时候常用的快捷键/小技巧!非常好用!掌握这些快捷键/小技巧,看源码的效率提升一个等级
    2022-01-01
  • Spring Boot解决循环依赖的过程详细记录

    Spring Boot解决循环依赖的过程详细记录

    这篇文章主要介绍了Spring Boot解决循环依赖的过程,Spring框架通过三级缓存机制解决循环依赖问题,分别为singletonObjects、earlySingletonObjects和singletonFactories,需要的朋友可以参考下
    2024-09-09
  • 如何在 Spring Boot 中使用 OpenAI ChatGPT API

    如何在 Spring Boot 中使用 OpenAI ChatGPT API

    这篇文章主要介绍了如何在Spring Boot中使用OpenAI ChatGPT API,我们探索了 OpenAI ChatGPT API 以生成对提示的响应,我们创建了一个 Spring Boot 应用程序,它调用 API 来生成对提示的响应,需要的朋友可以参考下
    2023-08-08
  • @RequestMapping 如何使用@PathVariable 从URI中获取参数

    @RequestMapping 如何使用@PathVariable 从URI中获取参数

    这篇文章主要介绍了@RequestMapping 如何使用@PathVariable 从URI中获取参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java中mybatis和hibernate的用法总结

    java中mybatis和hibernate的用法总结

    在本篇文章里小编给大家整理的是一篇关于java中mybatis和hibernate的用法总结内容,有兴趣的朋友们可以学习参考下。
    2021-01-01
  • JAVA正则表达式校验qq号码的方法

    JAVA正则表达式校验qq号码的方法

    Java作为一种开发语言,有许多值得推荐的地方,但是它一直以来没有自带对正则表达式的支持。下面小编给大家带来了JAVA正则表达式校验qq号码的方法,需要的朋友参考下吧
    2018-04-04

最新评论