相关文章推荐

老版的zk是通过ant进行编译的,但最新的zk源码中已经没了 build.xml ,而多了 pom.xml ,也就是说构建方式由原先的Ant变成了Maven,源码下下来后,直接编译、运行是跑不起来的,有一些配置需要调整,这边做下总结。

导入项目类型

导入类型是 Maven ,不要再选 Eclipse 了。

点击IDEA最右侧的“Maven”,点击第二个小图标:“Generate Sources and Update Folders For All Projects”。

修改jre

打开项目结构(⌘ + ;),指定jdk为 1.8

修改gitignore文件

由于开发环境需要进行调试,临时配置文件是不需要进代码仓库的,所以进行排除。

# Ignore debug conf
conf/zoo.cfg
conf/zoo*.cfg
zookeeper-server/src/main/resources/log4j.properties

拷贝配置文件

  • 拷贝zoo_sample.cfg文件至相同文件夹下,名为:zoo.cfg,配置全部使用默认;
  • 创建/tmp/zookeeper目录,用于存放zk数据;
  • 拷贝log4j.properties文件至:zookeeper-server/src/main/resources,文件名还是log4j.properties不变;
  • 打开项目结构,将resources目录标记为Resources类型(不配置的话日志配置不生效);

    增加运行启动项

    配置启动项:

    QuorumPeerMain
    org.apache.zookeeper.server.quorum.QuorumPeerMain
    conf/zoo.cfg
    

    创建Info文件,路径:src/main/java/org/apache/zookeeper/version/Info.java

    public interface Info {
        public static final int MAJOR=3;
        public static final int MINOR=4;
        public static final int MICRO=6;
        public static final String QUALIFIER=null;
        public static final int REVISION=-1;
        public static final String REVISION_HASH = "1";
        public static final String BUILD_DATE="12/25/2019 09:55 GMT";
    

    修改pom.xml

    默认的pom.xml有问题,直接编译多少都会报找不到类的错,需要手工调整:

  • java.lang.ClassNotFoundException: com.codahale.metrics.Reservoir
    <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-core</artifactId>
        <version>3.1.0</version>
    </dependency>
      
  • java.lang.ClassNotFoundException: org.xerial.snappy.SnappyInputStream
    <dependency>
      <groupId>org.xerial.snappy</groupId>
      <artifactId>snappy-java</artifactId>
      <version>1.1.7.3</version>
    </dependency>
      
  • java.lang.ClassNotFoundException: org.eclipse.jetty.server.HttpConfiguration$Customizer
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
    </dependency>
      
  • java.lang.ClassNotFoundException: org.eclipse.jetty.servlet.ServletContextHandler
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-servlet</artifactId>
    </dependency>
      
  • java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException
    <dependency>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
    </dependency>
        int MICRO=0;
        String QUALIFIER="SNAPSHOT";
        String REVISION_HASH="c50c132a7d7da7c5e68ed195b3290c7cc96cfc4d";
        String BUILD_DATE="04/04/2020 14:30 GMT";
    

    如果之前手工创建了Info日志,IDE则会提示Info文件重复,需要把之前手工创建的删除。

    Console又不显示日志了

    原因未知,但试了下,把log4j.properties文件挪到zookeeper-server/src/main/java目录下,再挪回zookeeper-server/src/main/resources目录下,重新运行就恢复了。

  •  
    推荐文章