1. 程式人生 > >修改和編譯spring原始碼,構建jar(spring-context-4.0.2.RELEASE)

修改和編譯spring原始碼,構建jar(spring-context-4.0.2.RELEASE)

上週在定位問題的時候,發現有個異常是在spring構建bean的時候丟擲的,為了檢視更詳細的資訊,決定修改spring-context-4.0.2.RELEASE.jar中的CommonAnnotationBeanPostProcessor類的程式碼,在裡面打印出更詳細的資訊,以便我們分析和定位問題,下面我們一步一步通過實戰來修改和編譯spring-context的原始碼; 下載原始碼

下載原始碼的第一步,是找個用到了spring-context-4.0.2.RELEASE.jar的java工程,如果讀者您手裡沒有現成的工程,可以在我的git上下載,地址:[email protected]

:zq2599/blog_demos.git;

下載後可以發現裡面有很多工程,本次實戰用的工程是springmybatisexceptiondemo

用命令列進入pom.xml所在的目錄下,執行命令mvn dependency:sources,即可下載所有依賴庫的原始碼包,如下圖:

此時進入maven的本地倉庫,找到spring-context的目錄,在裡面就能看到原始碼的jar包

maven的本地倉庫,一般在使用者目錄的.m2資料夾下;

解壓jar包,準備材料

在maven的本地倉庫中,找到spring-context的目錄後,將裡面的spring-context-4.0.2.RELEASE.pom,spring-context-4.0.2.RELEASE-sources.jar,spring-context-4.0.2.RELEASE.jar這三個檔案都複製到一個新建的資料夾中,然後將spring-context-4.0.2.RELEASE-sources.jar和spring-context-4.0.2.RELEASE.jar都解壓; 新建spring-context的maven工程

新建一個maven工程,pom檔案的內容和spring-context-4.0.2.RELEASE.pom的一模一樣

進入剛才解壓的spring-context-4.0.2.RELEASE-sources.jar的資料夾,把裡面的org資料夾整個都複製到新建的maven工程的java資料夾下

只複製java檔案是不夠的,還要複製META-INF和xsd檔案,這些東西都不在spring-context-4.0.2.RELEASE-sources.jar包中,還記得剛剛我們把spring-context-4.0.2.RELEASE.jar檔案也解壓了麼?META-INF和xsd檔案在這個解壓的資料夾中可以找到;

先是META-INF,在spring-context-4.0.2.RELEASE.jar的解壓目錄中,把META-INF資料夾複製到新建的maven工程的resources資料夾下 接下來是xsd檔案,在spring-context-4.0.2.RELEASE.jar的解壓目錄中,進入org/springframework/cache/config子目錄,裡面不以class為字尾的檔案有四個,把這四個檔案全部複製到maven工程原始碼的org/springframework/cache/config目錄下

以下幾個目錄下也有xsd檔案,請像上面的方法一樣,將裡面的xsd和gif都複製到maven工程中對應的目錄下:

org/springframework/context/config org/springframework/ejb/config org/springframework/scheduling/config org/springframework/scripting/config 構建jar包

在上面所建的maven工程的pom.xml檔案所在目錄下,執行命令mvn clean package -U -Dmaven.test.skip=true,執行成功後,在target目錄下就能看到最新構建的jar包了

至此,我們實踐了構建spring-context的jar包的過程,根據實際需要,我們可以先修改了原始碼再構建,

改完程式碼後重新構建,生成新的spring-context-4.0.2.RELEASE.jar檔案,我的web應用之前已經部署在了tomcat下,現在開啟這個應用的lib目錄,用這個jar替換原有的檔案,再重啟tomcat,在控制檯可以看到改動的結果