本文基於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測試成功。
服務者注冊成功。