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


    org.springframework.boot
    spring-boot-maven-plugin

springbot项目中 通常使用上述方法打成jar包后,直接通过java -jar来运行。这种方式打成jar包的结构如下:

替换springboot打好jar包中的class文件_第1张图片

其中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

 

你可能感兴趣的:(替换springboot打好jar包中的class文件)