本篇文章首发于头条号Elasticsearch源码分析 - 源码构建,欢迎关注我的头条号和微信公众号“大数据技术和人工智能”(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注我的CSDN博客


本篇介绍一下如何从源码构建Elasticsearch,构建Elasticsearch源码是学习和研究Elasticsearch源码的基础,有助于更好的了解Elasticsearch。

环境准备

环境/软件 版本 备注
OS Ubuntu 14.04 LTS
Gradle 5.4
Java 9.0.4+11 Oracle Corporation 9.0.4 [OpenJDK 64-Bit Server VM 9.0.4+11]
Elasticsearch 6.2

从源码构建Elasticsearch需要注意下面几个问题:

1、从源码构建Elasticsearch需要使用Gradle,因此需要确认下是否安装了gradle,可以参考官网安装文档安装,安装步骤如下:

mkdir /opt/gradle
unzip -d /opt/gradle ./下载/gradle-5.4-bin.zip
ls /opt/gradle/gradle-5.4
#添加环境变量
vi ~/.bashrc
#在 ~/.bashrc 文件下面加上这句
export PATH=$PATH:/opt/gradle/gradle-5.4/bin
#使新增的环境变量即时生效
source ~/.bashrc
#检查 gradle 是否安装配置成功
gradle -v

2、Elasticsearch编译和运行时所要求的JDK版本是不一样的,以V6.2版本为例,Runtime要求最低JDK8,Compile要求最低JDK9。不同版本的Elasticsearch应该如何确定所需JDK运行时和编译的版本呢?可以在Elasticsearch的源码里找到,如下:

/*
* Elasticsearch <= v6.3
*/
//代码文件位置:buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy
static final JavaVersion minimumRuntimeVersion = JavaVersion.VERSION_1_8
static final JavaVersion minimumCompilerVersion = JavaVersion.VERSION_1_9
/*
* Elasticsearch >= v6.4
*/
//代码文件位置:buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy
//这段代码对应的配置文件分别是下面这两个:
//buildSrc/src/main/resources/minimumCompilerVersion
//buildSrc/src/main/resources/minimumRuntimeVersion
JavaVersion minimumRuntimeVersion = JavaVersion.toVersion(
BuildPlugin.class.getClassLoader().getResourceAsStream("minimumRuntimeVersion").text.trim()
)
JavaVersion minimumCompilerVersion = JavaVersion.toVersion(
BuildPlugin.class.getClassLoader().getResourceAsStream("minimumCompilerVersion").text.trim()
)

3、在终端执行构建操作前建议把终端改为bash,不然可能会有点问题。

开始构建

具体步骤如下:

#下载源码
git clone https://github.com/elastic/elasticsearch.git
#进入源码目录
cd elasticsearch
#切换到一个稳定分支
git checkout 6.2
#构建源码
./gradlew assemble

看到下面输出表示构建成功了。

BUILD SUCCESSFUL in 10m 15s
505 actionable tasks: 505 executed

测试

构建成功后就可以启动Elasticsearch了,如下:

#在源码目录下执行
./gradlew run

启动成功后浏览器打开127.0.0.1:9200显示如下:

{
"name" : "node-0",
"cluster_name" : "distribution_run",
"cluster_uuid" : "E3qa7TIkTTGNP32WizSyXg",
"version" : {
"number" : "6.2.5",
"build_hash" : "e38fe8a",
"build_date" : "2019-04-25T01:27:03.655047Z",
"build_snapshot" : true,
"lucene_version" : "7.2.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

Elasticsearch源码分析 - 源码构建的更多相关文章

  1. Flink源码分析 - 源码构建

    原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483692&idx=1&sn=18cddc1ee ...

  2. ffplay源码分析3-代码框架

    ffplay是FFmpeg工程自带的简单播放器,使用FFmpeg提供的解码器和SDL库进行视频播放.本文基于FFmpeg工程4.1版本进行分析,其中ffplay源码清单如下: https://gith ...

  3. 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 百篇博客分析OpenHarmony源码 | v13.02

    百篇博客系列篇.本篇为: v13.xx 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 51.c.h .o 几点说明 kernel_liteos_a_note | 中文注解鸿蒙内核 ...

  4. zxing源码分析——QR码部分

    Android应用横竖屏切换 zxing源码分析——DataMatrix码部分 zxing源码分析——QR码部分 2013-07-10 17:16:03|  分类: 默认分类 |  标签: |字号大中 ...

  5. 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 百篇博客分析OpenHarmony源码 | v18.04

    百篇博客系列篇.本篇为: v18.xx 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 51.c.h .o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...

  6. nginx源码分析-源码结构

    本文主要简单介绍nginx源码目录结构.程序编译流程.如何构建学习nginx的环境等.本文以及后续nginx源码分析文章是基于nginx当前(2009-02-27)的稳定版本0.6.35进行的分析,该 ...

  7. Spark GraphX图计算核心源码分析【图构建器、顶点、边】

    一.图构建器 GraphX提供了几种从RDD或磁盘上的顶点和边的集合构建图形的方法.默认情况下,没有图构建器会重新划分图的边:相反,边保留在默认分区中.Graph.groupEdges要求对图进行重新 ...

  8. Servlet-Cookie源码分析 源码环境:Tomcat8

    最近在学习servlet的一些实现细节,阅读了Cookie的源码. Cookie本质上是服务器发送给客户端(主要是浏览器)的一个会话临时数据. 其源码注释文档的说明: Creates a cookie ...

  9. Spring源码分析——源码分析环境搭建

    1.在Windows上安装Gradle gradle工具类似于maven,用于项目的构建,此处主要用于构建spring源码,以便我们将spring源码导入eclipse. 开发环境 Java:JDK8 ...

随机推荐

  1. [Java]LeetCode690. 员工的重要性 | Employee Importance

    You are given a data structure of employee information, which includes the employee's unique id, his ...

  2. Python面试真题第三节

    51.正则匹配,匹配日期2018-03-20 url='https://sycm.taobao.com/bda/tradinganaly/overview/get_summary.json?dateR ...

  3. JavaScript 正则表达式全面总结

    本文适合有 JavaScript 基础 && 面向搜索引擎书写正则的人群. 正则表达式是用于匹配字符串中字符组合的模式.正则表达式的模式规则是由一个字符序列组成的.包括所有字母和数字在 ...

  4. 由浅入深的讲述Get和Post的区别

    对于网上对get和post区别的长篇大论,我只想说一些干货其中最重要的是:GET和POST本质上两者没有任何区别.他们都是HTTP协议中的请求方法.底层实现都是基于TCP/IP协议.所谓区别,只是浏览 ...

  5. 6.jQuery(实例)

    1.开关灯效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  6. Vue生命周期详解

    Vue所有的生命周期钩子自动绑定在this上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周期方法.这是因为箭头函数绑定了父上下文,因此this与你期 ...

  7. MetaEditor中MQL使用方法

    MT4程序--帮助--MQL5文档,转到网页,切换到中文,点击旁边搜索图标. MetaEditor编辑器,点击相应关键字,按F1键,即可启动MT4对应的MQL4的对应关键字用法帮助.但是英文. 时间序 ...

  8. Linux系统打开文件最大数量限制(进程打开的最大文件句柄数设置)

    ulimit  [-HSTabcdefilmnpqrstuvx  [limit]] 利用ulimit命令可以对资源的可用性进行控制. -H选项和-S选项分别表示对给定资源的硬限制(hard limit ...

  9. IdentityServer4之Implicit(隐式许可) —— oidc-client-js前后端分离

    IdentityServer4之Implicit(隐式许可) —— oidc-client-js前后端分离 参考 官方文档:oidc-client-js:oidc-client是一个JavaScrip ...

  10. Ocelot中使用Butterfly实践

    Ocelot(https://github.com/TomPallister/Ocelot)是一个用.net core实现的API网关,Butterfly(https://github.com/But ...