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

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

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

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

jar -tvf xxx.jar | grep xxx.class

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

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

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

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

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

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

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

5、重新打包jar

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

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

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

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

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

7、替换jar包中的jar文件

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

jar -编程uvf0 abc.jar BOOT-INF/lib/a.jar
##使用的是-uvf0而js是不是-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 $ja编程客栈rName $fullPath
mv $className $fullPath
jar -uvf $jarName $fullPath
rm -r BOOT-INF

总结

到此这篇关于Java替换jar包中class文件的文章就介绍到这了,更多相关Java替换jar包class文件内容请搜索编程客栈(www.cppcns.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.cppcns.com)!

本文标题: Java替换jar包中class文件的完整步骤记录
本文地址: http://www.cppcns.com/ruanjian/java/710035.html