dubbo2.5.6從下載到編譯成功並且部署成功過程


本文基於dubbo2.5.6版本

原文鏈接:http://www.cnblogs.com/zhuwenjoyce/

 

 
 

 

 

1,下載dubbo

首先從 github 下載源代碼並閱讀 readme.md ,參考該文檔,首先下載 opensesame,並編譯:
$ git clone https://github.com/alibaba/opensesame.git (或者 git@github.com:alibaba/opensesame.git)
$ cd opensesame
$ mvn install

然后,下載 dubbo 並編譯:
$ git clone https://github.com/alibaba/dubbo.git (或者 git@github.com:alibaba/dubbo.git)
$ cd dubbo
$ mvn clean install -Dmaven.test.skip

編譯成功之后,生成 idea 相關配置文件:$ mvn idea:idea    接下來,將代碼通過 maven 的方式導入到 idea ide 中
生成eclipse相關配置文件:$ mvn eclipse:eclipse             接下來,將代碼通過 maven 的方式導入到 eclipse 中

如果順利的話,到此結束。

2,clean install命令執行報錯現象

但是很多人都會遇到各種各樣的問題,尤其是新手小白對於首次接觸dubbo這樣大型的maven架構項目,和dubbo本身維護緩慢(有段時間停止維護),源碼版本跟不上時代(比如spring版本過老)等問題,還是有必要把遇到的問題和解決方案寫出來的。

比如我在執行命令: mvn clean install -Dmaven.test.skip 時就遇到這樣的錯誤:

復制代碼
 1 [INFO] ------------------------------------------------------------------------
 2 [INFO] Reactor Summary:
 3 [INFO] 
 4 [INFO] dubbo-parent ....................................... SUCCESS [  1.053 s]
 5 [INFO] Hessian Lite(Alibaba embed version) ................ SUCCESS [  5.029 s]
 6 [INFO] dubbo-common ....................................... FAILURE [  0.816 s]
 7 [INFO] dubbo-container .................................... SKIPPED
 8 [INFO] dubbo-container-api ................................ SKIPPED
 9 [INFO] dubbo-container-spring ............................. SKIPPED
10 [INFO] dubbo-container-jetty .............................. SKIPPED
11 [INFO] dubbo-container-log4j .............................. SKIPPED
12 [INFO] dubbo-container-logback ............................ SKIPPED
13 [INFO] dubbo-remoting ..................................... SKIPPED
14 [INFO] dubbo-remoting-api ................................. SKIPPED
15 [INFO] dubbo-remoting-netty ............................... SKIPPED
16 [INFO] 省略后面其它項目...因為都是SKIPPED狀態
復制代碼

 看到上圖的子模塊編譯順序了嗎?這就是dubbo整個系統里的模塊依賴順序,越是靠前,越是基礎模塊,越是其它模塊所依賴的重要模塊。

復制代碼
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.641 s
[INFO] Finished at: 2017-10-21T15:29:08+08:00
[INFO] Final Memory: 20M/153M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project dubbo-common: Compilation failure -> [Help 1]
[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/MojoFailureException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :dubbo-common
復制代碼

 

可以看到執行到dubbo-common子模塊時就編譯失敗了,后面其它子模塊因為此失敗全部被maven跳過執行。

3,clean install命令執行失敗解決方案

install 失敗的最終原因是我本地的org.javassist下的jar包壞掉了,我也不明白為什么由maven統一管理下,其中個別下載的jar包是壞的,不能用的……具體表現為:項目的Maven Dependencies目錄下明明有這個javassist-3.20.0-GA.jar,但是在java源碼文件里的import  javassist.ClassPool; 一直編譯報錯,說明項目里並沒有成功引用該jar,可是Maven Dependencies目錄下的其它jar里的class確引用成功,那么原因只有一個:javassist-3.20.0-GA.jar壞掉了。解決方法:把maven庫里的javassist包3.20.0 版本整個目錄刪掉,重新maven編譯項目(項目右鍵 -> Maven Update)就OK。

4,編譯子模塊解決方案(大部分人死在不會自己成功編譯dubbo上)

編譯的最終目的:成功得到dubbo-admin.war,就算整個項目編譯成功。

編譯前把dubbo/pom.xml此文件里的JDK版本從1.6改為1.7:

<java_source_version>1.7</java_source_version>
<java_target_version>1.7</java_target_version>
<file_encoding>UTF-8</file_encoding>

然后把項目的face里的JDK改為1.7,有的還需要把eclipse里面的編譯級別改成1.7。

編譯任何一個子模塊的解決方案相同,此處只列舉一個子模塊的maven項目在eclipse中導入例子。

在eclipse中Package Explorer空白處,右鍵 -> Import -> Maven -> Existing Maven Projects -> Maven Projects -> Browse按鈕選擇dubbo-remoting-api項目,相同操作再次選擇dubbo-remoting-default項目,然后在Problems選項卡中可以看到很多的Errors信息,那是因為依賴子模塊尚未編譯通過。其它子模塊導入方式相同。

 1 [INFO] ------------------------------------------------------------------------
 2 [INFO] Reactor Summary:
 3 [INFO] 
 4 [INFO] dubbo-parent ....................................... SUCCESS [  1.053 s]
 5 [INFO] Hessian Lite(Alibaba embed version) ................ SUCCESS [  5.029 s]
 6 [INFO] dubbo-common ....................................... FAILURE [  0.816 s]
 7 [INFO] dubbo-container .................................... SKIPPED
 8 [INFO] dubbo-container-api ................................ SKIPPED
 9 [INFO] dubbo-container-spring ............................. SKIPPED
10 [INFO] dubbo-container-jetty .............................. SKIPPED
11 [INFO] dubbo-container-log4j .............................. SKIPPED
12 [INFO] dubbo-container-logback ............................ SKIPPED
13 [INFO] dubbo-remoting ..................................... SKIPPED

最后只要按照此打印列表中把所有子模塊順序maven update一下,就可以得到正確的dubbo-admin.war。

 5,部署dubbo-admin.war

把dubbo-admin.war復制到tomcat的webapp目錄下,重命名為ROOT.war,刪掉webapps下舊的所有項目,啟動之后訪問127.0.0.1:8080 即部署成功。

這里注意,如果你事先沒有成功啟動zookeeper,黑色的dos窗口會一直線程阻塞監聽zookeeper 端口,直到zookeeper啟動成功,才繼續啟動線程,然后才是war部署成功。

瀏覽器訪問127.0.0.1:8080 會彈出一個登錄窗口,默認是ROOT / ROOT 

6,dubbo-admin部署驗證成功

 

 

7,dubbo-demo測試成功

dubbo-demo中有3個子模塊項目,分別分3此用導入maven項目形式導入到eclipse里,成為看上去的3個分開的項目,每個項目進行打包操作:項目右鍵 -> Run As -> Maven install ,可以看到在每個項目的target目錄下各生成了一個自己項目名字命名的jar,表示這些項目編譯成功。

順序執行以下操作,測試demo:

1,啟動zookeeper,默認監聽2181端口。在windows下執行zookeeper-3.4.9\bin\zkServer.cmd,在linux下執行zkServer.sh

2,啟動dubbo-admin。參考第5小節《部署dubbo-admin.war》

3,demo下的3個項目分別進行maven install操作生成3個jar包。

4,往zookeeper注冊中心注冊我們的應用程序,這是dubbo治理我們應用程序服務的關鍵!(也可以選擇其它的注冊中心)修改provider配置文件META-INF/spring/dubbo-demo-provider.xml和consumer配置文件META-INF/spring/dubbo-demo-consumer.xml,都進行以下操作:

注釋掉:<!-- <dubbo:registry address="multicast://224.5.6.7:1234"/> -->

添加:<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />

5,執行(provider提供者)main方法:dubbo\dubbo-demo\dubbo-demo-provider\src\main\java\com\alibaba\dubbo\demo\provider\Provider.java :

 

6,執行(consumer消費者)main方法:dubbo\dubbo-demo\dubbo-demo-consumer\src\main\java\com\alibaba\dubbo\demo\consumer\Consumer.java

消費者發送消息成功,服務提供者響應消息成功,demo測試成功。

 

服務者注冊成功。 

 

消費者注冊成功。 

I am a boy, my name is baby. If you want to contact to me, please send any to email 1115198844@qq.com, I will reply you.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM