如何替換springboot打好jar包中的class文件
替換springboot打好jar包中的class文件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>springbot項目中 通常使用上述方法打成jar包后,直接通過java -jar來運行。
這種方式打成jar包的結(jié)構(gòu)如下:

其中MANIFEST.MF內(nèi)容如下:
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 * 注意:這種方式打好的包無法直接執(zhí)行。因為Spring Boot的可執(zhí)行jar有特殊的啟動器和結(jié)構(gòu),不能直接用普通的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
前提是你已經(jīng)準備好新的MyClass.class文件,且路徑和jar內(nèi)路徑一致。
注意:
- 該方法不會破壞Spring Boot啟動器結(jié)構(gòu),推薦使用。
- 需要保證class文件路徑正確。
3、使用zip命令替換
jar包本質(zhì)是zip包,也可以用zip命令替換:
zip -u app.jar BOOT-INF/classes/com/example/demo/MyClass.class
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot使用SSE推送消息到客戶端的實現(xiàn)
文章瀏覽閱讀246次,點贊4次,收藏4次,本文介紹了在SpringBoot中實現(xiàn)SSE(Server-Sent Events)服務(wù)端推送功能,用于Electron桌面應(yīng)用的消息推送,感興趣的可以了解一下2026-01-01
Java8?LocalDateTime時間日期類使用實例詳解
本文從 LocalDateTime 類的創(chuàng)建、轉(zhuǎn)換、格式化與解析、計算與比較以及其他操作幾個方面詳細介紹了 LocalDateTime 類在 Java 8 中的使用,感興趣的朋友跟隨小編一起看看吧2024-03-03
關(guān)于java.io.EOFException產(chǎn)生的原因以及解決方案
文章總結(jié):EOFException異常通常發(fā)生在嘗試從空的ObjectInputStream對象中讀取數(shù)據(jù)時,解決方法是在finally語句中添加判斷,確保objectInputStream不為空后再進行關(guān)閉操作,在處理1.txt文件為空的情況時,捕獲EOFException可以避免程序終止,并且不會拋出空指針異常2025-01-01
解決shiro 定時監(jiān)聽器不生效的問題 onExpiration不調(diào)用問題
這篇文章主要介紹了解決shiro 定時監(jiān)聽器不生效的問題 onExpiration不調(diào)用問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
spring源碼學(xué)習(xí)之bean的初始化以及循環(huán)引用
這篇文章主要給大家介紹了關(guān)于spring源碼學(xué)習(xí)之bean的初始化以及循環(huán)引用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10

