替换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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论