做 Java 練習時,引用的第三方的 jar 包,其中有些方法冗余,在 IDEA 智能提示時總是排在第一個提示,影響開發效率,因此想修改 jar 包中 class 的方法。由於使用的是 macOS 系統,看了很多教程基本上是基於 Windows 的,不大適用,故整理下解決方法,方便遇到此問題的同學能順利解決。
現在假設我有一個第三方 jar 包 net.jar ,我要修改里面的 Print.class 類,具體操作步驟如下:
反編譯 jar 包
使用 JD-GUI 這個工具就能解決,下載安裝完打開軟件將你的 jar 包拖進去,將你要修改的 class 保存成 .java 文件即可。這一步我們得到了 Print.java 文件。(當然,你也可以通過其它工具來反編譯,網上說通過 vim 直接修改 class 文件的,我這邊打開會亂碼,故反編譯后保存成 .java 文件再修改。)
生成 class
得到了修改完的 .java 文件后,我們需要將它編譯成 class 文件才能替換掉 jar 包里的 class ,直接改后綴名是無效的哦。現在假設 jar 包和 反編譯后的 .java 文件在同一目錄,執行以下命令即可生成可用的 class。
javac -cp net.jar Print.java
替換 class
1、以防萬一,先拷貝 jar 包為 .zip 文件再進行操作
cp net.jar net.zip
2、解壓 net.zip 到 net-unzip 文件夾
unzip net.zip -d net-unzip/
進入解壓后的文件夾,找到你要替換的類,並用之前生成的 Print.class 替換掉。
3、重新打包
在 net-unzip 目錄里執行以下命令,其中 META-INF 和 net 均為解壓后就存在的目錄
jar -cvfM0 net.jar META-INF net
重新打包完,此時當前目錄應該多了個 net.jar 文件,至此整個修改 jar 包操作結束。