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

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

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

替換

8. 刪除在我們的 src 目錄下新建的包、類。
總結
兩種方式各有優(yōu)缺點,方案一,實現(xiàn)起來簡單,但是會在你的項目下,多出一個第三方的包路徑。
比如,我現(xiàn)在的項目包路徑是:com.xttblog.nacos,我現(xiàn)在需要重寫一個 apache 包中的某個類中的代碼,我的項目下就需要新建一個包和類:org.apache.tomcat.utils.HelloUtil。
方案二,其實就是把方案一種產生的 class 文件復制出來,然后把原來的 jar 包中相同的 class 文件給替換掉,然后重新壓縮成一個新的 jar 文件。方案二會造成,多數(shù)人可能不知道這是一個"野包"。
一般遇到這種情況,最好是從上游解決。比如,如果是內部系統(tǒng),就要求相關團隊提供新的jar;如果是開源項目,可以提交新的 pr,也可以自己拉取分支,自己公司單獨維護。其他不知名的野包盡量不建議使用。
