java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > 替换springboot打好jar包中的class文件

如何替换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内路径一致。

注意:

3、使用zip命令替换

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

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

总结

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

您可能感兴趣的文章:
阅读全文