1.准备工作
1.1 源码包下载
这个不多说了,直接去github clone吧。
1.2 编译工具-Gradle
ElasticSearch每个版本对于gradle版本的要求都可能会变化,所以我们直接去源码包中查看当前需要的gradle版本,然后去官网下载。
源码包中,找到文件名gradle-wrapper.properties的配置文件,并找到下面这个配置,更换为自己下载的gradle包
1.3 java环境
直接去官网对着elasticsearch的版本查,本文用OracleJdk-17
2. 环境变量配置
以linux系统为例
配置完之后执行 source bash_profile 立即生效
查看配置 gradle -v
3. 提速工作
3.1 Gradle换源
编译ElasticSearch
需要下载很多依赖包,而其中有很多包的站源是国外的,下载时比较慢。 因此需要给Gradle换成国内镜像源,提升依赖包下载速度。 在 GRADLE_HOME 目录中的 init.d
下,创建文件 init.gradle
,并贴上如下内容:
3.2 ElasticSearch源码包换Gradle分发地址
打开你下载下来的 ElasticSearch
源码包,进入目录 gradle/wrapper
。然后,重新将 GRADLE_HOME
打包成 gradle-8.1.1-all.zip,拷贝到该目录下。
随后,打开文件 gradle-wrapper.properties
,如下:
上述文件原计划的 distributionUrl
默认为官网下载地址。
意思是在编译源码初期,程序会去搜寻指定好的 gradle-8.1.1-all.zip
压缩文件,然后解压下载。
但官网有时下载特别慢,会导致编译第一步就卡壳了。
本文初已提供了 gradle-6.5-all.zip
的快速下载方式,便于使用。
所以这里并不需要再次进行下载,
因此在文件中指定 distributionUrl = gradle-8.1.1-all.zip
,就在本地文件目录即可。
这样可以快速跳过编译前期漫长的下载 gradle-8.1.1-all.zip
的等待时间。
4. 编译ElasticSearch源码
4.1 用 IntelliJ Idea 打开 ElasticSearch 源码根目录中的 build.gradle 文件,如下图:
4.2 如下图中进行gradle配置,配置完成后,点 "OK" 。
4.3 如下图中操作,进行源码编译
4.4 正在编译中,慢慢等吧
5. 启动ElasticSearch 源码
5.1 本地启动
创建一个Java-Application 启动配置,并填写相关配置,红框部分特别注意
VM options配置如下:
#指定上文中你所下载的 ElasticSearch 客户端安装路径
-Des.path.home=xxxxxx
#指定客户端安装路径中的配置路径
-Des.path.conf=xxxxxxx
-Dlog4j2.disable.jmx=true
-Xmx4g
-Xms4g
默认安装的 Jdk-17 环境中没有足够权限构建类加载器的,这会导致ElasticSearch源码启动时报安全权限错误;
打开你所配置的 java.policy 文件,在文件中的 grant 结构末尾加上以下权限指令:
permission java.lang.RuntimePermission "createClassLoader";
在配置文件中设置 node.name, 不然会启动失败,报空指针错误
ElasticSearch-
在加载配置文件时,如果没有设置 node.name
,程序会去获取系统中的HOSTNAME
环境变量作为默认值,若系统中没有配置环境变量HOSTNAME
,则获取到的值为空,导致在验参阶段时会跳出空指针错误。
因此,为避免该错误,可以对 -Des.path.conf
路径中的配置文件elasticsearch.yml
,进行如下设置,以指定节点名:
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: es-demo
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: es-demo-node
一切就绪。点击你的debug按钮吧