Elasticsearch 6.5源码编译最新版

6.5

源码编译启动

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

配置阿里云加速,找到安装的根目录,我这里是 /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 }
    }
}
  • 环境

    • mac os 14

    • jdk-11

    • gradle

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

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

  • 拉取源码

    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

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值