如何替换springboot打好jar包中的class文件

 更新时间:2025年12月30日 14:23:07   作者:赶路人儿  
本文介绍了在Spring Boot项目中打包成jar包后,临时替换class文件的三种方法:解压-替换-重新打包、使用jar命令直接替换class、使用zip命令替换jar包

替换springboot打好jar包中的class文件

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

springbot项目中 通常使用上述方法打成jar包后,直接通过java -jar来运行。

这种方式打成jar包的结构如下:

其中MANIFEST.MF内容如下:

Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Implementation-Title: grpc_server
Implementation-Version: 1.0-SNAPSHOT
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Start-Class: cn.edu.nuc.App
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.7.9
Created-By: Maven JAR Plugin 3.2.2
Main-Class: org.springframework.boot.loader.JarLauncher

有的时候我们想临时替换一个class文件做测试,该如何做呢?

1、解压-替换-重新打包

1.备份原jar:
cp app.jar app.jar.bak

2.解压jar:
mkdir temp
cd temp
jar xf ../app.jar

3.替换:
cp /path/to/new/MyClass.class BOOT-INF/classes/com/example/demo/

4.重新打包:
jar cf ../app-fixed.jar *
注意:这种方式打好的包无法直接执行。因为Spring Boot的可执行jar有特殊的启动器和结构,不能直接用普通的jar cf命令打包,否则启动器会失效。推荐用Spring Boot提供的spring-boot-maven-plugin或spring-boot-gradle-plugin重新打包,或者用zip命令重新打包后再用spring-boot-loader启动。


5.使用spring-boot-loader启动:
java -cp app-fixed.jar org.springframework.boot.loader.JarLauncher

2、使用jar命令直接替换class

jar uf app.jar BOOT-INF/classes/com/example/demo/MyClass.class

前提是你已经准备好新的MyClass.class文件,且路径和jar内路径一致。

注意:

  • 该方法不会破坏Spring Boot启动器结构,推荐使用。
  • 需要保证class文件路径正确。

3、使用zip命令替换

jar包本质是zip包,也可以用zip命令替换:

zip -u app.jar BOOT-INF/classes/com/example/demo/MyClass.class

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java  LinkedList类详解及实例代码

    java LinkedList类详解及实例代码

    这篇文章主要介绍了java LinkedList类详解及实例代码的相关资料,需要的朋友可以参考下
    2017-01-01
  • Java NIO中的零拷贝原理

    Java NIO中的零拷贝原理

    这篇文章主要介绍了Java NIO中的零拷贝原理,零拷贝即Zero-Copy,顾名思义,零拷贝是指的一种非拷贝的方式来减少IO次数的工作方式,零拷贝的作用就是减少IO,提高IO效率,需要的朋友可以参考下
    2023-11-11
  • Springboot使用SSE推送消息到客户端的实现

    Springboot使用SSE推送消息到客户端的实现

    文章浏览阅读246次,点赞4次,收藏4次,本文介绍了在SpringBoot中实现SSE(Server-Sent Events)服务端推送功能,用于Electron桌面应用的消息推送,感兴趣的可以了解一下
    2026-01-01
  • Gson如何序列化内部类

    Gson如何序列化内部类

    本文介绍如何使用Gson对成员内部类及静态内部类进行序列化/反序列化,帮助大家更好的理解和使用gson库,感兴趣的朋友可以了解下
    2020-11-11
  • Java8 LocalDateTime时间日期类使用实例详解

    Java8 LocalDateTime时间日期类使用实例详解

    本文从 LocalDateTime 类的创建、转换、格式化与解析、计算与比较以及其他操作几个方面详细介绍了 LocalDateTime 类在 Java 8 中的使用,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • 关于java.io.EOFException产生的原因以及解决方案

    关于java.io.EOFException产生的原因以及解决方案

    文章总结:EOFException异常通常发生在尝试从空的ObjectInputStream对象中读取数据时,解决方法是在finally语句中添加判断,确保objectInputStream不为空后再进行关闭操作,在处理1.txt文件为空的情况时,捕获EOFException可以避免程序终止,并且不会抛出空指针异常
    2025-01-01
  • 解决shiro 定时监听器不生效的问题 onExpiration不调用问题

    解决shiro 定时监听器不生效的问题 onExpiration不调用问题

    这篇文章主要介绍了解决shiro 定时监听器不生效的问题 onExpiration不调用问题。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java获取客户端真实IP地址经典写法详解

    Java获取客户端真实IP地址经典写法详解

    在Web开发中,获取客户端的真实IP地址是一个常见需求,本文将分别给出经典写法(基于工具类/条件判断)和Lambda写法(基于函数式接口 + 流式处理)的实现,并进行对比
    2026-04-04
  • spring源码学习之bean的初始化以及循环引用

    spring源码学习之bean的初始化以及循环引用

    这篇文章主要给大家介绍了关于spring源码学习之bean的初始化以及循环引用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Java BigDecimal使用及基本运算(推荐)

    Java BigDecimal使用及基本运算(推荐)

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。这篇文章主要介绍了Java BigDecimal使用指南针(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论