首页 技术 正文
技术 2022年11月15日
0 收藏 493 点赞 3,256 浏览 1847 个字

一、问题背景

生产环境Windows机器上用的Zookeeper 3.4.6,最近经常报如下异常:

经过搜索,看到一篇帖子可以解决:https://www.jianshu.com/p/73eec030db86

但需要通过编译Zookeeper源代码的方式进行解决,于是有了本文的一番操作

二、编译过程

1.从Github上下载ZooKeeper源代码

https://github.com/apache/zookeeper

2.下载并安装Ant:http://ant.apache.org/

ZooKeeper 3.4.6是基于Ant进行构建的,不是基于Maven

下载时需要根据JDK版本,下载不同的Ant版本

我安装的是JDK1.8,所以下载了Ant 1.10版本

The Apache Ant team currently maintains two lines of development. 
The 1.9.x releases require Java5 at runtime and 1.10.x requires Java8 at runtime.

 解压后,在Windows环境变量中设置一下ANT_HOME

并在PATH环境变量中添加ANT的bin目录

3.修改http为https

这是ZooKeeper编译过程中最坑的一个地方!

访问http://repo1.maven.org时始终有问题,用了梯子也不好使,搜了一下,原来对Maven中央仓库的访问,从2020年1月15日起,不再支持http了:

https://central.sonatype.org/articles/2019/Apr/30/http-access-to-repo1mavenorg-and-repomavenapacheorg-is-being-deprecated/

https://blog.sonatype.com/central-repository-moving-to-https

https://twitter.com/sonatype_ops

修改下载的Zookeeper源代码根目录底下的ivysettings.xml,将里面的http改为https:

修改下载的Zookeeper源代码根目录底下的build.xml,将里面的http改为https:

4.打开CMD命令窗口,切换到下载的Zookeeper源代码根目录,执行ant eclipse命令,如果看到下面的画面,恭喜编译成功了:

5.导入到Intellij IEDA

前几个步骤执行完,构建的是一个Eclipse工程,所以导入到Intellij IDEA时,要选择Eclipse

选择jdk 1.8

看build.xml中,java编译的版本是1.5

    <property name="javac.target" value="1.5" />
<property name="javac.source" value="1.5" />所以  

所以需要在Settings中设置编译的目标字节码输出为jdk 5:

在Project Structure中设置语言级别为jdk 5:

三、运行编译后的ZooKeeper

1.将conf目录下的zoo_sample.cfg复制为zoo.cfg,并设置dataDir以及dataLogDir:

2.找到运行主类:org.apache.zookeeper.server.ZooKeeperServerMain,并设置启动配置

3.启动ZooKeeper

四、解决生产环境异常:java.nio.channels.CancelledKeyException

1.根据补丁文件,修改源代码:

第一处修改:

第二处修改:

第三处修改:

2.生成新的jar

在Intellij IDEA中设置Ant编译,点击jar阶段,会在build目录生成最终的ZooKeeper-3.4.6.jar

五、解决编译时下载不了jar包

1.准备一个梯子,设置代理

下载过程中,需要从墙外下载大量的 jar包,有了梯子,会省很多事

打开Zookeeper源代码根目录底下的build.xml,增加针对梯子的代理

2.在编译的过程中,如果没有梯子或者有梯子也不管用,可以看看报错的行数,比如:

如果这些编译时下载不下来,可以看看它的条件,就是“除非相应的jar已经存在”,否则就去下载

改的时候,要注意那个“usetimestamp”,如果是true,改为false,否则编译时可能不认我们手动下载的那个jar,因为时间戳可能对不上

将相关的jar下载下来,解压后,放到它需要的目录底下:

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,949
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,475
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,288
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,103
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,735
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,770