IDEA搭建Zookeeper源码阅读环境

Zookeeper是当前业界最广泛使用的一个分布式协调组件,能够实现诸如统一命名服务、状态同步服务、集群管理、分布式锁、分布式应用配置项的管理等等功能。

工作中经常用到Zookeeper,作为一个充满好奇心的程序猿,决定来研究研究Zookeeper的源代码,第一步要做的事情就是在IDE里面搭建好源码阅读环境。但是当把源码clone到本地用IDEA打开的时候发现到处都是飘红,各种问题。后来查了下,发现Zookeeper居然还是使用Ant管理项目,用Ivy下载依赖,没办法直接用IDEA打开。

那么应该怎么解决呢?简单。既然IDEA不能直接打开,那么我们可以手动拷贝源代码。

方法

  1. 先手动把Zookeeper源代码下载到本地。

    可以选择从Github上下载源代码,也可以选择先下载Jar包,然后从Jar包中解压出源代码。这里要选择带源代码的jar

    我选择的是下载Jar包然后从Jar包中解压缩源代码。
    为什么要选择这种方式呢?因为从Github中下载下来的代码,一直有个InterfaceAudience.Public注解问题找不到,还没有找到解决方法。而且从Github下载下来的项目包含的东西太多,很多都跟阅读源代码不相关的东西,而从Jar包中获得的源代码正好是启动Zookeeper所需要的全部的东西,这样有利于减少无关东西的干扰。
    解压缩之后的目录结构如下图所示:

  2. 新建一个Mavan项目。

  3. 把第一步解压缩后的org目录拷贝到新建项目的main目录下,结果如下图所示:

  4. 这个时候IDEA会大量爆红,显示有些依赖找不到。此时需要在pom.xml文件中添加下列依赖:

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.21</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.netty</groupId>
        <artifactId>netty</artifactId>
        <version>3.2.10.Final</version>
    </dependency>
    <dependency>
        <groupId>jline</groupId>
        <artifactId>jline</artifactId>
        <version>0.9.1</version>
    </dependency>
    <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>1.2</version>
    </dependency>
    

经过上面四个步骤,整个Zookeeper项目应该就可以正常启动了。

问题

  1. 经过上面的步骤之后,还是有些文件有可能会报错:

    override is not allowed when implementing interface method

    这个是跟IDEA环境配置有关,这个时候只需要修改西相关配置就可以了。

    配置
    Language level选择6-@Override in interfaces即可。

2017-07-30 14:1450