重寫或替換jar中的類或方法兩種方式
往期熱門文章:
編輯:業(yè)余草
推薦:https://www.xttblog.com/?p=5355
序言
在某些特殊場景下,我們需要修改 jar 包中的某些類和方法。jar 我們沒有修改權(quán)限,那么怎么重寫里面的類和方法呢?本文教你兩種常用的方法,分享給大家,不喜勿噴!
重寫jar的兩種方式
第一種
重寫步驟:
找到你所要重寫的方法的所在類,查看其中的路徑;
在我們的 src 目錄下新建一個同包名同類名的類;
將 jar 包中的重寫方法所在類的所有代碼復(fù)制到我們新建的同包名同類名的類中;
在我們新建的同包名同類名的類中修改對應(yīng)的方法中的代碼,注意要保持方法中的參數(shù)不要發(fā)生改變,也不要刪除原類中已有的方法,但是可以新增一些方法。
原理:編譯輸出的時候會優(yōu)先使用我們 src 下面的類,而不是優(yōu)先使用 Jar 包里面的類,這樣就達(dá)到了覆蓋 jar 包方法的目的。
第二種
在不影響項目目錄結(jié)構(gòu)的情況下可以使用這種方式:
參考上面第一種方法的步驟 1-4,操作相同。
將同包名同類名的類重寫好,將
.java文件編譯成.class文件。桌面新建一個文件夾,將編譯好的
.class文件存進(jìn)去。打開 jar 包所在的文件目錄

5. 使用壓縮軟件預(yù)覽 jar 包中的 class 文件
「壓縮軟件我用的Bandzip」

6. 將 jar 包中需要替換的類刪除(jar中的原文件),把自己編譯好的.class文件復(fù)制進(jìn)去。

替換

8. 刪除在我們的 src 目錄下新建的包、類。
總結(jié)
兩種方式各有優(yōu)缺點,方案一,實現(xiàn)起來簡單,但是會在你的項目下,多出一個第三方的包路徑。
比如,我現(xiàn)在的項目包路徑是:com.xttblog.nacos,我現(xiàn)在需要重寫一個 apache 包中的某個類中的代碼,我的項目下就需要新建一個包和類:org.apache.tomcat.utils.HelloUtil。
方案二,其實就是把方案一種產(chǎn)生的 class 文件復(fù)制出來,然后把原來的 jar 包中相同的 class 文件給替換掉,然后重新壓縮成一個新的 jar 文件。方案二會造成,多數(shù)人可能不知道這是一個"野包"。
一般遇到這種情況,最好是從上游解決。比如,如果是內(nèi)部系統(tǒng),就要求相關(guān)團隊提供新的jar;如果是開源項目,可以提交新的 pr,也可以自己拉取分支,自己公司單獨維護(hù)。其他不知名的野包盡量不建議使用。
最近熱文閱讀:
1、為什么 "??????".length !== 3 ? 2、還在用XShell?Tabby安排上... 3、Spring Batch 批處理,騷氣還強大! 4、我的mybatis-plus用法,被全公司同事開始悄悄模仿了! 5、Spring是如何管理事務(wù)的之@Transactional注解詳解 6、面試官:如果要存 IP 地址,用什么數(shù)據(jù)類型比較好?99%人都會答錯! 7、面試官:為什么不能將實數(shù)作為 HashMap 的 key? 8、Redis 官方可視化工具,高顏值,功能太強大! 9、不好意思, Maven 該換了! 10、面試官 | Spring Boot 項目如何統(tǒng)一結(jié)果,統(tǒng)一異常,統(tǒng)一日志? 關(guān)注公眾號,你想要的Java都在這里
