1. 程式人生 > >springFramework 原始碼學習日記(一)原始碼下載與編譯

springFramework 原始碼學習日記(一)原始碼下載與編譯

 抽空學習springFramework原始碼,後續每天有時間都將學習心得發表,配合教程《spring 技術內幕》作者:計文柯
出版社:機械工業出版社

原始碼下載時間2012-9-2 下午4點,svn下載https://github.com/SpringSource/spring-framework/branches/3.2.0.M1
環境:jdk1.6.0.33

1.原始碼下載

Spring已經將原始碼從svn遷移到了git。對於習慣了svn的人來說依然可以svn checkout,最好checkout到英文路徑下,本人中文路徑編譯不過,具體原因不明
,路徑: https://github.com/SpringSource/spring-framework

,反正不想多裝git,有興趣的自己可以裝git,然後用git下載

官方說明:
The Spring Framework repository has moved to http://github.com/SpringSource/spring-framework.See the readme there for details on working with Git, building the framework, etc.Note that svn-based access is still available via GitHub's support for Subversion clients, e.g.: $ svn checkout https://github.com/SpringSource/spring-framework
See https://github.com/blog/966-improved-subversion-client-support for more details.

2.環境與工具
1)jdk不用提,必需品。最新的springFramework已經採用gradle編譯,故需要下載gradle包,如果人懶的話不想下載直接跳到第二步
下載地址:

    解壓後將gradle-1.1\bin目錄路徑新增到環境變數Path中,類似jdk的環境變數設定,cmd下輸入gradle -version 檢視當前版本是否路徑配置成功
2)

修改下gradlew.bat中關於jvm記憶體設定的引數後,在cmd中進入\spring-framework目錄中,執行 gradlew build -x test。跳過所有的測試,

因為測試總會有失敗,原因在spring-oxm的測試用例有問題,導致編譯失敗,如果不信的話大可以試下,結果你懂得。。。

如果執行gradlew 出現無法初始化jvm的訊息,則需要修改下gradlew.bat中關於jvm記憶體設定的引數,git下來之後原始設定是set GRADLE_OPTS=-XX:MaxPermSize=1024m -Xmx1024m %GRADLE_OPTS%,,恐怕就springFramework開發組那麼有錢...配置好高...本人4G記憶體條都不行囧,

可將MaxPermSize和Xmx稍微寫小一點,512M完全沒問題的

錯誤資訊如下:

  Error occurred during initialization of VM
  Could not reserve enough space for object heap
  Could not create the Java virtual machine

gradlew,這個是存在在spring-framework目錄下的一個bat檔案,是對Gradle的一個封裝,在使用這個命令時會自動去下載gradle,如果已經安裝了gradle則在編  譯過程中使用的gradlew命令應該都可以替換成gradle。自動下載gradle是根據gradle\wrapper目錄中的gradle-wrapper.properties中配置的,distributionUrl=http\://services.gradle.org/distributions/gradle-1.0-bin.zip。

 然後就是漫長的等待下載jar包編譯專案,如果第一步沒有下載gradle包(約50M)等待時間更加漫長,因為每一個spring子專案都需要依賴很多的jar包,而且連線的是spring的http://repo.springsource.org/ 倉庫下載,其速度可想而知,編譯完成後可以發現,springFramework本來只有50多M的變成了近500M(包括生產的說明文件和class之類),其中的jar包大概有100-200M左右大家可以據此算出時間

 本人的家庭網路是2M電信寬頻,折騰了近1個小時

第一次編譯40分鐘後果斷視窗一直處於等待狀態。。。果斷kill之,

第二次編譯,第一次編譯好的會自動跳過,然後繼續沒有完成的工作。第二次build了5分鐘,結果failed......referenceHtmlMulti編譯失敗。。。重複編譯2次均發現無用,發現當前存放springFramework路徑有中文,將專案拷貝到純英文的路徑中

第五次重新編譯有效,發現編譯

:referenceHtmlMulti
:referenceHtmlSingle
:referencePdf
:reference

時候一直是等待狀態,然後每個都過了5分鐘左右才成功,差點忍不住kill了重來,看來有點耐心還是好事。。。

這幾個其實是springFramework的官方說明文件,編譯成功後在 \build\reference可以看到,英文好的還是很具有參考價值

過了這關然後繼續是10多分鐘的下載編譯過程........

直到下午5點20分,折騰了一個小時多,第五次編譯總算build successful

③想將程式碼匯入到eclipse中

錯誤:參考網上的教程執行gradlew eclipse,然後果然編成功了,匯入工程的時候就囧了,的確生成了.classpath和.project

但是匯入就發現把整個springFramework工程匯入了,崩潰的是隨便進入一個類DefaultListableBeanFactory,按F4想檢視類繼承關係,結果失敗

ctrl方法也不能跳轉到原始碼,跳到了jar包,想了想應該是eclipse不支援繼承匯入問題。

正確:果斷度娘求步驟,然後發現了原來都有官方匯入eclipse說明,在工程的根目錄下有檔案import-into-eclipse.sh,用editplus之類工具開啟,可以看到,

官方說明的匯入eclipse分了5步,本人就翻譯給4級不過的童鞋算了

1.cmd視窗執行命令 gradlew cleanEclipse :spring-oxm:compileTestJava eclipse -x :eclipse

2.按照eclipse File > Import... > Existing Projects into Workspace匯入所有的springFramework專案

3.在cmd視窗執行 gradlew :eclipse

4.按照eclipse File > Import... > Existing Projects into Workspace匯入springFramework 父專案

5.如果你想獲得git支援(反正我是不用了,呵呵),全選spring*專案,然後右鍵Team > Share Project... 彈出視窗選擇Git然後下一步,

選擇"Use or create repository in parent folder of project",點選完成。

上面的流程之所以那麼長,其實無非就是如果gradlew eclipse那麼會直接把父目錄和所有子專案都生成.classpath和.project,但是

eclipse匯入的時候是不支援繼承的,所以你以為把所有的專案匯入到eclipse中,其實所有的子專案都在eclipse中找不到對方,那肯定

找不到它們相互引用的類,F4果斷無效,所以才有了先生成所有子專案的第一步和第二步匯入,然後生成父專案的第三步和第四步匯入

好了,現在重新DefaultListableBeanFactory 按下F4,總算繼承的結構圖出來了,程式碼沒有任何問題,能和正常專案一樣了

總結:折騰了2個多小時,碰到各種問題,也度娘過,自己也思考過,反正的話第一次弄springFramework原始碼,2個小時匯入工程,真是汗,

作為高階程式猿果然鴨梨很大.......反正的話多思考多動手才是王道,忘學習者共勉,吃飯去~~