【ZooKeeper】ZooKeeper源碼編譯


環境准備

  • Maven:3.6.3
  • Jdk:1.8.0_181
  • idea:2021.1.1 Community Edition(社區版)

1、下載ZooKeeper源碼

  官網地址:https://github.com/apache/zookeeper

  選擇需要的版本下載。

  本例下載的是 release-3.6.0 版本,下載完后解壓。

  

2、使用Idea打開項目,進行編譯

  • 導入Idea:File --> Open --> 選擇ZooKeeper項目目錄 zookeeper-3.6.0

        

  • 編譯命令:mvn clean package -Dmaven.test.skip=true

  

可能出現的錯誤

  問題1[ERROR] Failed to execute goal org.codehaus.mojo:properties-maven-plugin:1.0.0:read-project-properties (default) on project zookeeper: Properties could not be loaded from File: /Users/h__d/Documents/git-repository/zookeeper-3.6.0/zookeeper-server/src/main/resources/git.properties -> [Help 1]

    分析:缺少了 zookeeper-3.6.0/zookeeper-server/src/main/resources/git.properties 文件,而properties-maven-plugin需要使用此文件

    解決:添加 git.properties 文件,內容如下,最好不要注釋插件,否則還會有問題

# git提交id(編一個,或使用github上的id)
git.commit.id=9758d25
# 構建時間
build.time=2021-05-26

3、運行ZooKeeper服務端

  1)添加配置文件,復制conf/zoo_sample.cfg,重命名文zoo.cfg

    

  2)配置日志配置文件:將conf/log4j.properties 復制到 zookeeper-server/src/main/resources 下面

    且在zookeeper-server下src/main/resource上,鼠標右鍵,Mark Directory as -> Root Resources

    

  3)找到服務端啟動類

    分析 bin/zkServer.sh 啟動腳本 -> 找到 start 啟動參數對應的邏輯 -> 找到主啟動類參數:ZOOMAIN -> ZOOMAIN的值:org.apache.zookeeper.server.quorum.QuorumPeerMain

    

    找到 ZOOMAIN="org.apache.zookeeper.server.quorum.QuorumPeerMain",QuorumPeerMain即為服務端主啟動類

    ZOOCFG="$2" 可知是通過外部傳參進來的

  4)運行QuorumPeerMain服務端主啟動類,且進行運行配置

        

可能出現的錯誤

  問題1Exception in thread "main" java.lang.NoClassDefFoundError: com/codahale/metrics/Reservoir

      at org.apache.zookeeper.metrics.impl.DefaultMetricsProvider$DefaultMetricsContext.lambda$getSummary$2(DefaultMetricsProvider.java:126)

    分析:因為有些類引入是provided,把(zookeeper-3.6.0/zookeeper-server/pom.xml)相關的provided去掉就行了。這里jline除外

    解決:把zookeeper-server/pom.xml中的  <scope>provided</scope> 去掉

4、運行ZooKeeper客戶端

  1)找到客戶端啟動類

    分析 bin/zkCli.sh 客戶端啟動腳本 -> 代碼很少,看到 Java類:org.apache.zookeeper.ZooKeeperMain

     

   2)運行 ZooKeeperMain 客戶端啟動類,且進行運行配置

    

  3)運行效果

    

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM