Elasticsearch源码调试环境配置

本文介绍一下Elasticsearch在本地IDE中的调试配置,方便源码阅读和开发。

重要的选择

在开始搭建环境之前,需要作出两个重要的决定:

  1. Elasticsearch什么版本
  2. Java要什么版本

比较好的组合是:Elasticsearch 6.x及以下配Java 8,Elasticsearch 7.x配Java 9。

这是因为Elasticsearch 6.x使用了一些在Java 9中被废弃的包,这时候如果用Java 9来编译的话需要一些额外配置(后面会提到一点点)。而Elasticsearch 7.x是强制需要Java 9来编译的。

虽然可以做一些workaround让build跑起来,但是后面还会遇到一些很难受的坑(test过不去之类的),所以强烈建议使用Java 8编译Elasticsearch 6.x。

源码准备

1. 安装gradle

2. 安装Java 9,到Java官网下载安装

PS: 在master分支上(当前是v7.0.0 alpha)要强制Java9,这里就先装了~

3. 下载代码,切换到一个比较新的Tag,当前最新的是v6.1.3

4. 下载依赖和生成IDEA所需要的项目配置

5. 设置JAVA_HOME

Elasticsearch项目的编译和运行都需要环境变量显示定义环境变量JAVA_HOME,具体原因见这里,如果不知道在哪的话可以运行 /usr/libexec/java_home 来看下。

6. 编译

(-x test -x integTest可以跳过漫长的单元测试和继承测试)

如果使用的是Java 9,会提示JAXB Class缺失,因为这个东西在Java 9中被废弃了,如果需要使用,可以手动添加,在gradle.properties中添加:

导入IDEA

1. 导入,直接open project即可

2. 在Run >> Edit Configuration中添加JVM选项:

目的是设置config目录和bin目录(用于加载插件),并关闭jmx

3. 设置log和data目录,编辑distribution >> src >> main >> resources >> config >> elasticsearch.yml

${path.data}${path.logs}替换为创建好的目录,比如我的是:

4. 运行core >> src >> main >> java >> org >> elasticsearch >> bootstrap >> elasticsearch.java中的main方法。

这时候elasticsearch会尝试启动,并在distribution里的bin目录下创建bin、lib、modules和plugins目录,但是启动会失败。

5. 将distribution >> build >> modules目录复制到distribution >> src >> main >> resources >> bin目录下。

6. 再次运行main方法,已经可以成功执行

7. 试一下, curl localhost:9200 ,返回

You know, for search

其他

如果不跳过integTest,会卡在一个test case上,相关issue到目前还是open的状态(链接在此),不过跳过似乎对于本地调试没有什么影响。


1 thought on “Elasticsearch源码调试环境配置”

  • 1
    cat on 2023年1月4日 回复

    博主你好,我这边也是尝试本地启动ES,但是编译成功之后无法启动,报错空指针异常,无法激活string.hashcode(),然后也没有bin目录以及build目录,请问一下这个问题是啥原因呢

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据