ElasticSearch源码走读——环境搭建

1 前言

我们要读开源项目的源码,第一步必然是下载代码,搭建出便于我们阅读源码的环境。个人认为,搭建环境的目标有3个,重要性逐次降低:1.可进行代码跳转。2.可执行单测,包括项目中自带的,以及我们可随时自己编写一些临时单测。3.可以编译项目,以debug模式运行项目进程,通过打断点来暂停,观察和调试。(但对于多数的分布式项目,debug在很多方面是较为复杂的,可能引入很多新的问题。况且,优秀的开源项目大都可以通过单测来覆盖模拟各种case。因此,个人认为目标3是可选项,非必须)

对于ElasticSearch,它是基于Java语言、用gradle编译的(从ES 5.X起)。尽管截止我写此文时(2024.7),最新的版本已经到8.14,且今年内很可能会发布ES 9.X,但我们这里还是选择用ES 7.X来讲,原因1是目前业界主要使用的还是ES 6.X和 7.X,原因2是ES License限制了大多数云厂商的最高版本也只到7.10。在业务上云的大背景下,自建ES将来应当是越来越少的。因此可以预见,未来相当一段时间内,业界主要使用的ES版本最高还是7.10,我们本系列就以7.10来讲吧!

2 搭建方案

ES是个很大的工程,我统计过其中java文件的代码行数(包括单测)达到了205w行,gradle对于目前大多数无安卓经验的Java Web开发者来说也有些头疼,如果你图简单,可以直接跳至方案2~

方案1

从github下载,然后切换到7.10分支:

git clone git@github.com:elastic/elasticsearch.git
git checkout -b 7.10 origin/7.10

然后用IDEA打开这个工程目录。顺利的话,它会自动识别到gradle工程,然后开始构建。由于项目大,构建速度会很慢,需要耐心等待!
而如果不顺利的话,你可能会经历各种报错,我遇到的主要有下面几种:

  1. gradle下载很慢。
    注意,gradle需要用它指定的那个版本(看项目目录下gradle/wrapper/gradle-wrapper.properties文件里的内容,其中有一行distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip,这指示构建时要从这个url下载gradle安装包。如果下载很慢,我们可以从其它网络ok的地方下载,拷到本地,然后修改指向本地路径distributionUrl=file\:/{your_save_path}/gradle-6.6.1-all.zip
  2. jdk版本不对。
    gradle和jdk版本是一一对应的。在项目目录下.ci/java-versions.properties文件里,我们可以看到ES_BUILD_JAVA=openjdk14,因此,老老实实安装jdk14吧!我以前试过jdk11、13或jdk17会报各种错。
    然后一定别忘,在IDEA里确认把“项目”、“模块”、“gradle”的jdk版本分别设置好:
    项目jdk
    模块jdk
    gradle jdk
    ES项目自带了很多模块,包括一些系统插件、单测、x-pack(商业化功能)等等,不过我们关注的所谓“ES源码”,就是最核心的模块就是server路径,如果看到server已经被IDEA正确识别,并在其中能做代码跳转,就已经算成功了:
    加载成功
    而实际上,可能还会踩不少坑的,主要都是gradle相关,我的建议是,尽量少修改项目里的gradle配置,最多就换安装包路径,否则越改问题越多。如果出错,就清缓存、重开项目。
    另外,经常在本项目关闭后,再打开时,经常会花费大量时间重新indexing代码,可能和IDEA缓存机制有关。但元凶还是因为ES项目本身就太大了!

方案2

方案1,如果是实操,还是挺折腾的。而对于大多数用户,一般就是ES的使用者、业务方,我们仅仅是在ES使用中遇到了些问题,想临时看一眼代码,不想单独去建什么gradle工程,可以做到吗?
其实也是可以的!这就是方案2,引入jar包的方式。我们国内目前多数项目都是maven构建的,那就以maven为例,在 中央仓库 里可以查到gav:

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.10.2</version>
</dependency>

呵呵,可以看到7.10.2的引用量真高啊:

重新加载maven项目后,可以看到在引用库里有ES了,也能进行代码跳转,不过这里就没有单测了。适合偶尔喽一眼。
在这里插入图片描述

4 总结

本文是ElasticSearch源码走读的第一篇,介绍了在IDE中搭建环境的2种方案。
方案1可以代码跳转、运行单测。其实在此基础上,执行项目编译、debug模式运行也是可以的。适合对ES进行比较深入的研究,甚至是二次开发。
方案2只能进行代码跳转。适合场景:1.业务方偶尔看下ES某块地方是怎么实现的;2.用于编写ES插件时,引入jar包参与编译。

下一期准备讲总体代码结构,就是我们今天所说的server目录下的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值