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测试成功。
服务者注册成功。
消费者注册成功。
dubbo2.5.6从下载到编译成功并且部署成功过程的更多相关文章
- [原创]Nexus5 源码下载、编译、真机烧录过程记录
asop使用清华镜像源https://mirror.tuna.tsinghua.edu.cn/help/AOSP/ 一开始使用每月初始化包的方式因为无法搞定版本的问题,没能通过编译,无奈,老老实实一点 ...
- Ubuntu10.04下载并编译Android4.3源代码
注:转载或引用请标明出处 http://blog.csdn.net/luzhenrong45/article/details/9719433 去年用Ubuntu10.10成功下载并编译Andro ...
- 【转】Android 4.3源码的下载和编译环境的安装及编译
原文网址:http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html 告诉windows用户一个不好的消息,windows环境下没法 ...
- 【转】在Ubuntu上下载、编译和安装Android最新源代码
原文网址:http://blog.csdn.net/luoshengyang/article/details/6559955 看完了前面说的几本书之后,对Linux Kernel和Android有一定 ...
- 在Ubuntu上下载、编译和安装Android最新源码
看完了前面说的几本书之后,对Linux Kernel和Android有一定的认识了,是不是心里蠢蠢欲动,想小试牛刀自己编译一把Android源码了呢?一直习惯使用Windows系统,而Android源 ...
- 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6564592 在前一篇文章提到,从源代码树下载下 ...
- 在Ubuntu上下载、编译和安装Android最新源代码
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6559955 看完了前面说的几本书之后,对Lin ...
- Nginx使用教程(一):下载并编译安装Nginx
安装依赖 <br\>我们已经选择下载程序源代码进行手动编译,而不是使用软件包管理器(如Yum,Aptitude或Yast)进行安装. 这个选择有两个原因. 首先,软件包可能不包含在您的Li ...
- ns-3 的下载、编译以及 Eclipse 的相关配置
0. 写在前面 对于初次接触Linux系统的人来说,ns-3 的安装似乎并不友好.但其实仅仅要按部就班地来做,其安装过程也没有看上去的那么复杂.本文将官方 Wiki 中的安装过程稍作梳理,希望能为刚開 ...
随机推荐
- Python之上下文管理
http://www.cnblogs.com/coser/archive/2013/01/28/2880328.html 上下文管理协议为代码块提供包含初始化和清理操作的上下文环境.即便代码块发生异常 ...
- 【Win 10 应用开发】UI Composition 札记(八):用 XamlLight 制作灯光效果
前面老周已介绍过灯光的使用,如果你忘了,请用九牛二虎之力猛点击这里去复习一下.本篇老周再介绍另一种添加灯光的方法,这种方法是专为 XAML 元素而设计的,可以很方便地为可视化元素添加灯光效果. 不知道 ...
- 十一、VueJs 填坑日记之使用Amaze ui调整列表和内容页面
上一篇博文我们整合了Amaze ui,并且调整了一个头部header和底部footer文件,其实做起来也很简单,只要按照步骤来做,完全没有问题.今天我们来重新调整一下列表页面和内容页面,使我们做的后台 ...
- WPF开发的彩票程序(练手好例子) 附源码
前言 WPF是.NET最新的界面开发库,开发界面非常灵活!但是学习WPF难度也非常大. 应朋友之邀,编写了一个小程序.程序虽小,五脏俱全,WPF开发的灵活性可窥见一斑. 对于新手学习有很好的借鉴意义, ...
- PHP时间戳和日期互转换
在php中我们要把时间戳转换日期可以直接使用date函数来实现,如果要把日期转换成时间戳可以使用strtotime()函数实现,下面我来给大家举例说明. 1.php中时间转换函数 strtotime ...
- Less的Mixin
什么是Mixin Less中,允许你将一个类嵌入到另一个类中,被嵌入的类也可以看作变量.换句话说,你可以用一个类定义样式,然后把它当作变量,在另一个类中,只要引用变量的名字,就能使用它的所有属性, L ...
- iOS APP上架被拒重新提交审核教程
iOS APP审核比较严格,难免会出现被拒绝的情况,需要根据苹果反馈的问题修改后重新打包上传审核! 1.登录itunesconnect.https://itunesconnect.apple.com进 ...
- liunx中图形化桌面环境中的脚本编程之——创建文本菜单
整体是通过建立菜单布局,然后根据菜单上的布局建立函数(就是为这些布局实现功能),最后将函数和布局实现逻辑上的相连: 如何建立菜单布局? 整体上是通过打印字符创建出,因此需要使用echo命令,但是有一些 ...
- 《Linux命令行与shell脚本编程大全》第二十一章 sed进阶
本章介绍一些sed编辑器提供的高级特性. 21.1 多行命令 按照之前的知识,所有的sed编辑器命令都是针对单行数据执行操作的. 在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理 ...
- 域名和ip不能访问的原因
centos的话可能默认可能会有firewalld,可以执行 systemctl stop firewalld systemctl disable firewalld 禁用后在看看,前提都是域名得备案 ...