原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483694&idx=1&sn=bd03afe5ab798b4732c1a3457d60c53b 本篇介紹一下如何從源碼構建Elasticsearch,構建Elasticse ...
本篇介紹一下如何從源碼構建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"
}