zoukankan      html  css  js  c++  java
  • Eleaticsearch源码分析(一)编译启动

    转自:https://lunatictwo.github.io/2017/12/21/Eleaticsearch%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90(%E4%B8%80)%E7%BC%96%E8%AF%91%E5%90%AF%E5%8A%A8/

    源码下载

    地址:https://github.com/elastic/elasticsearch

    分支

    使用git tag

    命令可以看到目前 es 的各个版本分支,这里我们分析 6.0 版本:

    git checkout v6.0.0

    编译

    前提需要jdk10的支持

    es使用了gradle,在es源码根目录执行:(下载依赖)

    gradle idea

    之后执行:(编译)

    gradle build -x test

     (网太慢,下了好几个小时 . md...)

    注意这两步要在项目导入IDEA之前操作,源码中 build.gradle 有相关提示:

    / Make sure gradle idea was run before running anything in intellij (including import).
    File ideaMarker = new File(projectDir, '.local-idea-is-configured')
    tasks.idea.doLast {
      ideaMarker.setText('', 'UTF-8')
    }
    if (System.getProperty('idea.active') != null && ideaMarker.exists() == false) {
      throw new GradleException('You must run gradle idea from the root of elasticsearch before importing into IntelliJ')
    }

    运行

    将项目导入IDEA,找到es启动主类:org.elasticsearch.bootstrap.Elasticsearch,
    配置 Run/Debug Configurations:

    Main Class: org.elasticsearch.bootstrap.Elasticsearch
    VM Options: -Dlog4j2.disable.jmx=true -Des.path.home=/Users/Code/utils/elasticsearch-6.0.0 -Des.path.conf=/Users/Code/utils/elasticsearch-6.0.0/config

    注意要配置 -Des.path.home 及 -Des.path.conf 让 es 发现主路径及配置文件路径,然后就可以愉快的启动了。

    报错 1 jar hell

    这个错误是因为 es 中一个 jar 文件中有大量的重复类,代码进行了审查,注释掉相关的 check 即可:

    elasticsearch/core/src/main/java/org/elasticsearch/plugins/PluginsService.java line 379: JarHell.checkJarHell(union);
    elasticsearch/core/src/main/java/org/elasticsearch/bootstrap/Bootstrap.java    line 195: JarHell.checkJarHell();

    报错 2 Security.java 类中 String index out of range: -1

    源码中使用了 hardcode 的方式来校验 jar 包,会造成冲突,GitHub上边有相关的 Issue:Internal: Add versionless alias for rest client codebase in policy files #26521

    在 elasticsearch/core/src/main/java/org/elasticsearch/bootstrap/Security.java 中修改 esVersion 的获取方式即可:

    //final String esVersion = Version.CURRENT + (Build.CURRENT.isSnapshot() ? "-SNAPSHOT" : "");
    final String esVersion = Version.CURRENT.toString();
  • 相关阅读:
    HTML5项目笔记7:使用HTML5 WebStorage API构建与.NET对应的会话机制 Hello
    论设计模式和分析模式
    昨天我做了点什么事情啊?
    时间,时间,还是时间
    人生需要规划
    突然想起今天的博客汇报没写
    昨天看了熊猫大侠
    双休日往往会忘了写日志
    老婆说我是缺心眼!
    要下班了才想起没写报告
  • 原文地址:https://www.cnblogs.com/xingzc/p/9395612.html
Copyright © 2011-2022 走看看