ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

debug zookeeper 源码时,报 :Exception in thread "main" java.lang.NoClassDefFoundError: com/coda

2022-01-21 02:02:00  阅读:225  来源: 互联网

标签:lang provided java Reservoir zookeeper jetty metrics 源码 com


参考:https://stackoverflow.com/questions/57363051/exception-in-thread-main-java-lang-noclassdeffounderror-com-codahale-metrics

zookeeper 源码地址:https://github.com/apache/zookeeper.git

clone 到本地后

 

通过 zkServer.cmd 的 

call %JAVA% "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" "-Dzookeeper.log.file=%ZOO_LOG_FILE%" "-XX:+HeapDumpOnOutOfMemoryError" "-XX:OnOutOfMemoryError=cmd /c taskkill /pid %%%%p /t /f" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*

找到 入口:QuorumPeerMain

 

 

1. 修改配置文件

(1)zoo_sample.cfg 改名为 zoo.cfg

(2)修改  dataDir 为 dataDir=/Users/kevin/Documents/workspace/ideaworkspace/zookeeper-release-3.7.0/data

 

2. 引入以下依赖 (如果 zookeeper-server 的 pom.xml 中没有的话),但要将 metrics-core 的  <scope>provided</scope> 注释掉

  <dependency>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
      <scope>provided</scope>
    </dependency>

    <dependency>
       <groupId>io.dropwizard.metrics</groupId>
       <artifactId>metrics-core</artifactId>
       <scope>provided</scope>
    </dependency>

     <dependency>
      <groupId>org.xerial.snappy</groupId>
      <artifactId>snappy-java</artifactId>
      <scope>provided</scope>
    </dependency>
    
      <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-servlet</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-client</artifactId>
      <scope>provided</scope>
    </dependency>

 

3. 编译 zookeeper-jute 模块 并标记 target 中 generated-sources 中的 java 为 Generated Sources Boot

防止出现 ACL、Id 缺失的错误

 

 

 

4. 编译 zookeeper-server 并标记 target 中 generated-sources 中的 java 为 Generated Sources Boot

 

5.  debug 方式运行  QuorumPeerMain 中的 main 方法,在执行 ZooKeeperServerMain 类中 的 runFromConfig 方法的  ServerMetrics.metricsProviderInitialized(metricsProvider); 一行时,报 Exception in thread "main" java.lang.NoClassDefFoundError: com/codahale/metrics/Reservoir

原因:(1)2 中 metrics-core 的  <scope>provided</scope> 未注释掉 

   (2)缺少 metrics-graphite 依赖

 

解决方法:

参考 stackoverflow 上 

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

这个问题的回答

 

 

 

 查看 zookeeper-server 的 pom.xml 中 metrics-core 的版本:

  <dependency>
       <groupId>io.dropwizard.metrics</groupId>
       <artifactId>metrics-core</artifactId>
<!--       <scope>provided</scope>-->
    </dependency>

 

 

 

 

 

 

 

版本为 :4.1.12.1

因此 引入 4.1.12.1 版本的 metrics-graphite 依赖:

    <dependency>
      <groupId>io.dropwizard.metrics</groupId>
      <artifactId>metrics-graphite</artifactId>
      <version>4.1.12.1</version>
    </dependency>

 

再次  compile  zookeeper-server 模块

 

6. 编辑启动配置,配置启动参数即 配置文件位置

 

 

 

 

 

 

填入 zoo.cfg 位置:

 

即可运行成功

标签:lang,provided,java,Reservoir,zookeeper,jetty,metrics,源码,com
来源: https://www.cnblogs.com/wtx106/p/15828768.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有