目录
1. 准备工作
1.1 下载Ant
1.2 解压Ant
1.3 配置Ant环境变量
2. Zookeeper源码下载编译
2.1 源码下载
2.2 Zookeeper源码编译
问题一: 下载ant-eclipse-1.0.bin.tar.bz2失败
问题二: 下载某个jar包异常导致编译失败
问题三: UnknowHostExecption:repo2.maven.org
3. 导入zookeeper源码到Idea中
3.1 zookeeper项目导入
3.2 配置zoo.cfg
3.3 引入maven依赖
3.4 启动zookeeper
问题一: org.apache.zookeeper.version.Info找不到符号
问题二: 缺少org.apache.zookeeper.data等相关包
问题三: log4j配置无法引用
由于Zookeeper是由Ant编译,需下载Ant并安装配置; 下载地址: https://ant.apache.org/bindownload.cgi
变量名: ANT_HOME
变量值: D:\java\apache-ant-1.10.7
变量名: PATH
变量值: %ANT_HOME%\bin
CMD控制输入: ant -version
输出版本信息, 说明配置成功
地址: https://github.com/apache/zookeeper
注意: 不要下载过于老的版本, 我之前下载的是3.4.6的, 在该版本的build.xml中的maven仓库配置已经失效, 并且依赖的一些老版本的jar包也存在下载问题
1. 打开CMD窗口
2. 切换到zookeeper源码根目录下
3. 输入ant eclipse 开始编译
原因: 下载连接失效
dest="${java.server.resources.dir}/ant-eclipse-1.0.bin.tar.bz2" usetimestamp="false" />
解决:
将 "https://downloads.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2"
修改为: "http://ufpr.dl.sourceforge.net/project/ant-eclipse/ant-eclipse/1.0/ant-eclipse-1.0.bin.tar.bz2"
再次输入: ant eclipse
编译成功!
在编译过程可能会因为网络问题出现某个jar包下载失败而导致编译失败的问题, 出现类似问题可以尝试重新(ant eclipse)编译一次; 在第二次编译时, 前一次已下载的jar包就不会重复下载, 只会下载之前未下载或下载失败的jar包, 然后重新编译即可
如果下载时使用老版本(如: 3.4.6 )的zookeeper, 这里还会报错
由于老版本中的maven中央仓库配置的是repo2.maven.org, 现在已经无法访问, 所以下载依赖失败
如果把build.xml中的仓库地址改为repo1, 仍然存在依赖下载失败的问题
即使更换maven地址, 所依赖的jar包也无法下载, 所以可以考虑使用稍高一点版本的源码
方式1: File => New => project from Exitsing Source => 选择已编译的zookeeper项目文件
方式2: idea开始界面 => Import Project => 选择已编译的zookeeper项目文件
选择 Eclipse
一直Next
将zoo-sample.cfg复制一份,重命名为zoo.cfg, 并设置dataDir和dataLogDir
Main类: org.apache.zookeeper.server.ZooKeeperServerMain
zoo.cfg地址: D:\Desktop\source_code\zookeeper\zookeeper-release-3.4.14\conf\zoo.cfg
解决方案一: 参考播客 Zookeeper源码遇到的问题 org.apache.zookeeper.version.Info找不到符号
zookeeper源码编译的坑
解决方案二:
创建接口Info.java
public interface Info {
int MAJOR=1;
int MINOR=0;
int MICRO=0;
String QUALIFIER=null;
int REVISION=-1; //TODO: remove as related to SVN VCS
String REVISION_HASH="1";
String BUILD_DATE="2019-3-4";
}
将接口定义放在包org.apache.zookeeper.version下
不知道为什么在编译时, org.apache.zookeeper.data等相关包并没有反编译出来, 导致程序报错
但是不影响项目运行, 因为只是缺少源码包, 而class文件并不缺少
在启动配置中添加VM options配置如下:
-Dlog4j.configuration=file:D:/Desktop/source_code/zookeeper/zookeeper-release-3.4.14/conf/log4j.properties
启动
启动成功!