1,下載dubbo
首先從 github 下載源代碼並閱讀 readme.md ,參考該文檔,首先下載 opensesame,並編譯:
$ git clone https://github.com/alibaba/opensesame.git (或者 git@github.com:alibaba/opensesame.git)
$ cd opensesame
$ mvn installhtml
而後,下載 dubbo 並編譯:
$ git clone https://github.com/alibaba/dubbo.git (或者 git@github.com:alibaba/dubbo.git)
$ cd dubbo
$ mvn clean install -Dmaven.test.skipjava
編譯成功以後,生成 idea 相關配置文件:$ mvn idea:idea 接下來,將代碼經過 maven 的方式導入到 idea ide 中
生成eclipse相關配置文件:$ mvn eclipse:eclipse 接下來,將代碼經過 maven 的方式導入到 eclipse 中linux
若是順利的話,到此結束。git
2,clean install命令執行報錯現象
可是不少人都會遇到各類各樣的問題,尤爲是新手小白對於首次接觸dubbo這樣大型的maven架構項目,和dubbo自己維護緩慢(有段時間中止維護),源碼版本跟不上時代(好比spring版本過老)等問題,仍是有必要把遇到的問題和解決方案寫出來的。github
好比我在執行命令: mvn clean install -Dmaven.test.skip 時就遇到這樣的錯誤:web
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整個系統裏的模塊依賴順序,越是靠前,越是基礎模塊,越是其它模塊所依賴的重要模塊。spring
[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跳過執行。apache
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。windows
4,編譯子模塊解決方案(大部分人死在不會本身成功編譯dubbo上)
編譯的最終目的:成功獲得dubbo-admin.war,就算整個項目編譯成功。api
編譯前把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測試成功。
服務者註冊成功。