1. 程式人生 > >dubbo原始碼學習(1)---從github檢出原始碼到本地並進行maven構建

dubbo原始碼學習(1)---從github檢出原始碼到本地並進行maven構建

     本人打算學習下dubbo原始碼,雖然看了很多多執行緒、jdk集合類,尤其是設計在併發場景下使用的相關集合類的原始碼,總感覺理論的學習,尤其是看書,理解層次有限,且無法與實踐中結合起來,學習效率比較低。因此,打算研究下dubbo的原始碼,一方面本人所在的公司,也會使用分散式服務的呼叫,研究下最新的RPC分散式呼叫框架,可考慮對現有業務系統進行升級改造,另一方面本人一向對java底層原理比較感興趣,也看了jvm相關的不少書籍,總是感覺無法與具體的工程專案結合起來。

     首先,當然是訪問dubbo的github官方網站(訪問apche官網也可以點選連結跳轉過去),然後git clone下來原始碼,到本地目錄,可以參考官方手冊操作

      http://dubbo.apache.org/books/dubbo-dev-book/build.html

     接著,按說明進行maven構建,

  mvn clean install

     本人的maven版本為3.3.9,jdk版本為jdk1.7.0_17

     很不幸的,執行上面的構建命令後,即報錯:

C:\Java\dubbo>set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_17


C:\Java\dubbo>set JRE_HOME=C:\Program Files (x86)\Java\jdk1.7.0_17\jre
[WARNING]
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Expected root element 'settings' but found 'mirrors' (position: START_TAG seen <mirrors>... @1:9)  @ C:\Users\macpro\.m2\settings.xml, line 1, column 9
[WARNING]
[INFO] Scanning for projects...
Downloading: https://repo.maven.apache.org/maven2/org/springframework/spring-framework-bom/4.3.16.RELEASE/spring-framework-bom-4.3.16.RELEASE.pom
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] Non-resolvable import POM: Could not transfer artifact org.springframework:spring-framework-bom:pom:4.3.16.RELEASE from/to central (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_version @ org.apache.dubbo:dubbo-dependencies-bom:2.7.0-SNAPSHOT, C:\Java\dubbo\dependenci
es-bom\pom.xml, line 120, column 25
 @
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR]   The project org.apache.dubbo:dubbo-parent:2.7.0-SNAPSHOT (C:\Java\dubbo\pom.xml) has 1 error
[ERROR]     Non-resolvable import POM: Could not transfer artifact org.springframework:spring-framework-bom:pom:4.3.16.RELEASE from/to central (https://repo.maven.apache.org/maven2): Received fatal alert: protocol_version @ org.apache.dubbo:dubbo-dependencies-bom:2.7.0-SNAPSHOT, C:\Java\dubbo\depend
encies-bom\pom.xml, line 120, column 25 -> [Help 2]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException

[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException

    在百度相關錯誤資訊後,也無法定位具體問題,因此開啟maven命令的debug選項,輸出詳細的構建資訊,定位錯誤原因:

mvn -X clean install

    可以在輸出的日誌,錯誤位置的下方不遠處看到java ssl相關的錯誤輸出,且我的本機maven配置了自定義的映象地址,在輸出的日誌中,顯示也是https訪問的方式,那麼初步判斷是我自己配置的映象地址是https方式,沒有處理證書問題,所以無法訪問。

    由於配置maven https證書(也就是證書匯入到jdk中),比較繁瑣,因此我直接修改映象地址,指向國內http源地址。

    參考https://www.cnblogs.com/libingbin/p/5949483.html

    把上述帖子的setting.xml檔案內容直接拷貝過來,修改下里面本地maven倉庫的絕對目錄。

    接著執行maven構建命令,還是把debug選項開啟,以防再次出現問題時快速定位。

    果然,又出現了問題,由於打開了maven debug選項,輸出日誌較多,有1萬多行,初步檢視日誌,發現從遠端倉庫下載maven的jar包到本地倉庫基本沒有問題,之後報錯了,如下

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.0:compile (default-compile) on project dubbo-common: Compilation failure

[ERROR] javac: ϞЧքĿҪעѐѦ: 1.8

    一看這個,好像是maven對應的jdk1.7,雖然對於maven3.3.9來說沒問題,但是對於工程中使用到的其他jar包,可能有問題,必須要求jdk1.8,故更新jdk再試。此處我的處理方法是從其他安裝了jdk1.8的機器拷貝jdk目錄過來到本地,並在maven的啟用的bat指令碼中新增jdk設定,更新為jdk1.8。

    從新執行構建,看到螢幕也有些輸出錯誤,但是構建過程還是繼續在往下走,先忽略錯誤,看能不能出來最終的結果。

    在如下位置,卡住了,準確來說,是正在執行這個步驟,想起來官方說明文件一開始建議加大maven的記憶體,沒有設定,對於我此等碼農的破電腦,只能等待,期望不要oom了。

    [INFO] Building jar: C:\Java\dubbo\dubbo-common\target\dubbo-common-2.7.0-SNAPSHOT-sources.jar

    等了幾分鐘,很不幸的,最後還是輸出了錯誤,沒有構建成功,如下圖


    細看日誌,大部分都是單元測試部分報錯,想起來官方文件的建議,跳過單元測試構建
mvn install -Dmaven.test.skip
     最終終於輸出了成功資訊。[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12:36 min
[INFO] Finished at: 2018-07-03T08:41:37+08:00
[INFO] Final Memory: 62M/310M

[INFO] ------------------------------------------------------------------------

    檢視本地倉庫目錄C:\Users\macpro\.m2\repository\org\apache\dubbo 中,點開dubbo各模組目錄,進入目錄最底層,檢視大部分專案都生產了jar包檔案,有些專案未生成jar包檔案,原因未知,但是不影響。

總結:

   由於本人對maven操作細節和原理了解得不是很深入,所以構建過程出了問題需要自己分析日誌定位原因,花費了比較長時間。

下一步,就是構建eclipse工程,並匯入到eclipse中,構建含原始碼的除錯環境,除錯官方demo專案,跟蹤呼叫邏輯並學習分析了。