天天看點

【Java】使用javaassist修改jar包1 準備工具2 修改源碼

由于工作需要,可能會涉及到一些需要對第三方的一些jar包與源碼進行修改的情況,這個時候javaassist就可以派上用場。

javaassist是一個開源的編輯、修改、建立位元組碼的類庫,它在jboos項目的aop架構中發揮了很大的作用。不過我們這次僅僅使用它的修改class的功能。

<a target="_blank" href="http://pan.baidu.com/s/1qxe1bgw">testjar.jar</a>

内部結構:

【Java】使用javaassist修改jar包1 準備工具2 修改源碼

jdk1.6 1.7 1.8 均可

任何編輯器均可,本人使用的是intellij

javaassist的使用需要先将javaassist.jar導入到工程中,之後就可以直接在工程裡使用裡面的方法了。下面給出用javaassist修改外部jar包中testjar類的方法,并用反射測試了一下輸出結果,最後将修改好的類輸出到外部檔案夾

如果沒有問題的話,将會在外部檔案生成一個新的testjar.class 檔案,用jd-gui 檢視該class可以看到裡面的printtest方法已經被修改了

【Java】使用javaassist修改jar包1 準備工具2 修改源碼
【Java】使用javaassist修改jar包1 準備工具2 修改源碼

使用jdk自帶的打包工具jar可以将class檔案重新打包成jar檔案

其給出了一些使用例子如下:

示例 1: 将兩個類檔案歸檔到一個名為 classes.jar 的檔案中: 

       jar cvf classes.jar foo.class bar.class 

示例 2: 使用現有的清單檔案 'mymanifest' 并

           将 foo/ 目錄中的所有檔案歸檔到 'classes.jar' 中: 

       jar cvfm classes.jar mymanifest -c foo/ .

是以,我們在使用的時候需要使用terminal進入到class所在到檔案目錄,使用指令:

在目前目錄下打包生成newtestjar.jar檔案。

該檔案就是修改後的jar包,使用jd-gui打開檢視可以看到源碼已經被修改。

【Java】使用javaassist修改jar包1 準備工具2 修改源碼