首先我們要說說為什么要修改 jar 文件的包名,jar 包我們會非常高頻率的使用,尤其是用一些其他三方庫的時候,往往把 java 代碼打包成 jar 文件,方便項目依賴使用。筆者在開發過程中遇到過一些問題,是由於 jar 文件里面的包名和項目或者運行時環境的引用文件包名上存在沖突導致的,這時候我們修改 jar 文件的包名是一個比較快速有效的解決辦法。舉兩個例子,是筆者親身經歷的兩個情況。
- Gson庫:這個相信很多人都在使用,但是直接導入 gson 的 jar 包,在 HTC Desire HD 這款手機上會拋出異常(TypeNotFoundException)
- Jackson庫:這也是個 json 解析的,我們在做蘋果推送后台的時候,后台用 java 寫的,使用 java-apns 庫,依賴於 Jackson,然后運行就會拋出異常,具體原因沒有查,初步懷疑包名沖突,修改之后就解決的。
下面介紹如何修改jar文件的包名,需要用到一個小工具,叫做 jarjar.jar
這里我們以 gson.jar 為例,在 gson.jar 包目錄下新建一個文本文件,名字隨意,例如 rule.txt,寫入下面的內容。
rule com.google.gson.** com.google.mygson.@1
上面寫的就是修改規則,我們將包名中的 gson 修改為 mygson。打開命令行,輸入如下命令。
java -jar jarjar.jar process rule.txt gson.jar mygson.jar
命令執行完畢,同目錄下會多出一下 mygson.jar,這個就是修改包名之后的 jar 文件,我們項目導入這個 jar 包使用即可。