如何替换springboot打好jar包中的class文件
作者:赶路人儿
本文介绍了在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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
