暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Elasticsearch 6.5源码启动调试

醉鱼Java 2021-04-03
886

6.5

源码编译启动

  • 环境

    • mac os 14
    • jdk-11

    • gradle
  • 本地 拉取 elasticsearch 源码放置位置,下面配置都是此为基础 cxt/codework/github/es65/elasticsearch,最后一级为源码根目录

  • gradle 安装配置阿里云地址加速

  • 安装教程这里就不写了,百度下怎么安装就行版本我这安装的最新版

    配置阿里云加速,找到安装的根目录,我这里是 Users/cxt,在 mac 上就波浪线的目录,自己根据自己系统找到 gradle 安装目录即可

    创建 init.gradle

    cd Users/cxt
    # 此目录下有个隐藏文件夹gradle,注意小数点
    cd .gradle
    vim init.gradle

    init.gradle 内容如下

    allprojects{
    repositories {
    def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'
    def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter/'
    def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/'
    def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'
    all { ArtifactRepository repo ->
    if(repo instanceof MavenArtifactRepository){
    def url = repo.url.toString()
    if (url.startsWith('https://repo1.maven.org/maven2/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
    remove repo
    }
    if (url.startsWith('https://jcenter.bintray.com/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
    remove repo
    }
    if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL."
    remove repo
    }
    if (url.startsWith('https://plugins.gradle.org/m2/')) {
    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
    remove repo
    }
    }
    }
    maven { url ALIYUN_REPOSITORY_URL }
    maven { url ALIYUN_JCENTER_URL }
    maven { url ALIYUN_GOOGLE_URL }
    maven { url ALIYUN_GRADLE_PLUGIN_URL }
    }
    }

  • 拉取源码

    https://github.com/elastic/elasticsearc

  • 切换分支 6.5

    cd elasticsearch
    git checkout 6.5

  • 下载同版本二进制安装包为后面启动做准备,此处下载 6.5.4 的对应版本,6.5 的最高子版本,其它版本可自行查阅

    https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
    // 其它版本参考链接
    https://www.elastic.co/downloads/past-releases#elasticsearch

  • 下载 gradle-4.10-all.zip

    为什么下载这个版本呢,是因为我在下载完 elasticsearch 源码之后,

    查看 elasticsearch/gradle/wrapper/gradle-wrapper.properties 里面 distributionUrl 指定的为 gradle-4.10-all.zip 鉴于国内网络原因,先下载下来,更改使用本地

    • 下载 gradle-4.10-all.zip

      https://services.gradle.org/distributions/gradle-4.10-all.zip

    • 复制 gradle-4.10-all.zip 到 elasticsearch/gradle/wrapper/gradle-4.10-all.zip,与 gradle-wrapper.properties 同级

    • 更改 elasticsearch/gradle/wrapper/gradle-wrapper.properties 内容如下,主要是 distributionUrl 指定同级别目录下的 gradle-4.10-all.zip 即可

      distributionBase=GRADLE_USER_HOME
      distributionPath=wrapper/dists
      distributionUrl=gradle-4.10-all.zip
      zipStoreBase=GRADLE_USER_HOME
      zipStorePath=wrapper/dists
      distributionSha256Sum=fc049dcbcb245d5892bebae143bd515a78f6a5a93cec99d489b312dc0ce4aad9


  • 执行编译 为做导入 idea 做准备

    cd elasticsearch
    # 执行编译idea命令,如果报错可以根据提示加入命令参考排查,我这执行了一下./gradlew build 然后在执行gradle idea 就成功了
    ./gradlew idea

  • 导入 idea

    • 上一步 gradlew idea 执行成功之后会在 elasticsearch 目录下面生成一个elasticsearch.ipr
      文件,此时打开 idea ,选择 open 这个 ipr 文件即可自动导入

      注意:此处导入方式可使用 idea import Project ,但是本人在使用中发现导入不进去,然后使用 open elasticsearch.ipr 的方式可以正常启动,这个看个人情况吧

      openes
  • 导入之后选择右上角 Project Structure ,设置项目 JDK 为 11

  • 打开 gradle 设置,设置 gradle 中 Grad 了 JVM 为 Use Project JDK


  • 复制二进制安装文件导入源码编译文件夹

    • 解压刚才下载的 elasticsearch-6.5.4.tar.gz 压缩包

    • 复制 elasticsearch-6.5.4/config 文件夹到源码 elasticsearch/config

    • elasticsearch/config 下新建 java.policy

      内容为

      grant {
      permission java.lang.RuntimePermission "createClassLoader";
      };

  • 在源码 elasticsearch 文件夹下新建文件夹 home

  • 复制 elastic search-6.5.4/modules 到源码 elasticsearch/home/modules

  • 完成的目录结构大体如下

    elasticsearch(6.5 分支)

    ------ config

    ------ home

    ------module

  • 执行启动代码

    org.elasticsearch.bootstrap.Elasticsearch#main

    • 启动 es

      执行 main 方法

    • 访问 http://localhost:9200/ 启动成功

    • 设置 include dependencies

    • 编辑启动配置

      VM options 加入参数,参数含义见下方启动问题解决模块解析

      -Des.path.conf=/cxt/codework/github/es65/elasticsearch/config
      -Des.path.home=/cxt/codework/github/es65/elasticsearch/home
      -Djava.security.policy=/cxt/codework/github/es65/elasticsearch/config/java.policy
      -Dlog4j2.disable.jmx=true

    • 启动类位置

启动问题解决

  • 问题 1: the system property [es.path.conf] must be set

    解决:加入下方启动参数

    -Des.path.conf=/cxt/codework/github/es65/elasticsearch/config

  • 问题 2: Exception in thread "main" java.lang.IllegalStateException: path.home is not configured

    解决:加入下方启动参数

    -Des.path.home=/cxt/codework/github/es65/elasticsearch/home

  • 问题 3: Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")

    解决:

    • 新建 java.policy

      grant {
      permission java.lang.RuntimePermission "createClassLoader";
      };

  • 加入启动参数

    -Djava.security.policy=/cxt/codework/github/es65/elasticsearch/config/java.policy
    -Dlog4j2.disable.jmx=true

  • 问题 4: Plugin [percolator] was built for Elasticsearch version 6.5.4 but version 6.5.5 is running

    解决:

    注释掉 org.elasticsearch.plugins.PluginsService 里面 verifyCompatibility(bundle.plugin);这一行代码

attach 进程调试(一种更简单的调试源码方式)

  • 拉取代码切换分支启动 debug 调试


    git checkout 6.5

    ./gradlew run --debug-jvm

  • 打开 idea attach 进程,位置 Run-->Attach to Process,选中刚才启动的程序
     




Java进阶
扫码关注 不迷路
微信:c1041067258





 

 



文章转载自醉鱼Java,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论