在此之前,我一直尝试搭建各种源码环境,比如Spring,Springboot,MyBatis,以及这个Zookeeper,不知道怎么回事没有一个成功的,我在想,尼玛不是应该从github把源码下载下来,然后导入eclipse就直接运行完美么,然后每一次都报无数的错误,到处都是红XX,maven加载依赖以及pom.xml也到处都是红XX。最后真让人心灰意冷,不管怎么百度都没有用,只能靠maven项目调试来阅读源码,不过,今天,不,经过几天的尝试,终于,搭建成功看了一个框架的源码环境。得好好记下来!
一、环境准备
zookeeper比较奇怪,用的是Ant来构建的,不像spring或者其他用Maven或者Gradle来构建,也不知道为啥GitHub的项目都是需要先用Ant或者Maven或者Gradle构建才导入IDEA的。
1、Ant环境搭建
参考我的笔记:https://www.suibibk.com/topic/787360877572521984
2、Zookeeper源码下载
从github下载https://github.com/apache/zookeeper.git 我这里下载的是zookeeper-branch-3.5.5版本
二、Ant构建项目
1、执行ant eclipse构建
这里其实说简单不简单,说难不难,cmd进入zookeeper-branch-3.5.5目录下执行如下命令然后慢慢等就可以了。
D:\Work\Source>cd zookeeper-branch-3.5.5
D:\Work\Source\zookeeper-branch-3.5.5>ant eclipse
2、失败原因分析
这里来重点说说ant eclipse执行失败的问题:
上述命令会下载ant-eclipse-1.0.bin.tar.bz2文件,老是下载不成功,无法继续下去,修改源码中build.xml中的配置,将地址:
get src="http://downloads.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2"
更换成如下地址
get src="http://ufpr.dl.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2"
话说有人会发现缺少依赖包 commons-collections,在ivy.xml文件中加入如下配置:
<dependency org="commons-collections" name="commons-collections" rev="3.0"/>
我这里到没有遇到这个问题。
我遇到最恶心的问题就是maven一直下载不了,卡在
[ivy:retrieve]...
超级久,然后我去配置ivysettings.xml里把全部改为阿里云的,然后还是发现有些包还是下载不了,真崩溃,然后今天用别的网试了下,不需要改都下载成功了,成功界面如下:
三、导入Eclipse
1、导入为普通的Java项目
Ant构建项目如果网络没问题的话很快就可以了的,然后我们就可以导入Eclipse,这里有一个大坑,正常用户看到项目下面有个pom.xml,然后就觉得肯定是maven项目,二话不说就导入为maven项目,然后发现无数的报错,怎么改配置pom.xml都是红XX,然后怎么启动都报错,这里一定要注意:zk源码不是用maven构建的,所以在导入的时候不能选maven的方式,而是应该使用eclipse的方式导入!
四、测试
1、启动Zookeeper服务
找到类ZooKeeperServerMain的mian方法,右键加入如下参数:
配置文件,指定dataDir为本机下的目录:
D:/Work/Source/zookeeper-branch-3.5.5/conf/zoo.cfg
日志:
-Dlog4j.configuration=file:D:/Work/Source/zookeeper-branch-3.5.5/conf/log4j.properties
错误1:在运行的时候,会发现报错误:is not allowed for source level below 1.7 ,这是要求我们的编译环境必须1.7以上才行。
- 1、右键项目—属性—Java Compiler—勾选Enable project specific settings
- 2、Compiler compliance level—选择1.7或者1.8
- 3、勾选Use default compilance settings
- 4、apply
错误2:运行的时候会发现Version这个类报错
org.apache.zookeeper.Version中发现很多红色警告,很明显少了org.apache.zookeeper.version.Info类。
查询源码得知是用来发布的时候生成版本用的,我们只是研读源码,又不发布版本所以直接写死就ok了。
package org.apache.zookeeper.version;
public interface Info {
int REVISION = 1;
int MAJOR = 3;
int MINOR = 5;
int MICRO = 6;
String QUALIFIER = null;
String REVISION_HASH = "c11b7e26bc554b8523dc929761dd28808913f091";
String BUILD_DATE = "10/08/2019 20:18 GMT";
}
最后发现没有任何错误了,完美,项目如下,满足感爆棚。
启动后可以看见日志成功了。
2、启动客户端
找到类ZooKeeperMain的mian方法,右键加入如下参数:
要执行的命令:
-server 127.0.0.1:2181 ls /
日志:
-Dlog4j.configuration=file:D:/Work/Source/zookeeper-branch-3.5.5/conf/log4j.properties
可以看到结果如下:
可以看到执行成功了,输出了一个默认节点zookeeper
五、总结
1、源码环境搭建一定要看用什么构建的是Ant还是maven还是gradle
2、一定要仔细看错误原因,不要慌,逢山开路,遇水搭桥