本篇文章首發於頭條號Elasticsearch源碼分析 - 源碼構建,歡迎關注個人頭條號和微信公衆號「大數據技術和人工智能」(微信搜索bigdata_ai_tech)獲取更多幹貨,也歡迎關注個人CSDN博客。java
本篇介紹一下如何從源碼構建Elasticsearch,構建Elasticsearch源碼是學習和研究Elasticsearch源碼的基礎,有助於更好的瞭解Elasticsearch。node
環境/軟件 | 版本 | 備註 |
---|---|---|
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須要使用Gradle,所以須要確認下是否安裝了gradle,能夠參考官網安裝文檔安裝,安裝步驟以下:git
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
二、Elasticsearch編譯和運行時所要求的JDK版本是不同的,以V6.2版本爲例,Runtime要求最低JDK8,Compile要求最低JDK9。不一樣版本的Elasticsearch應該如何肯定所需JDK運行時和編譯的版本呢?能夠在Elasticsearch的源碼裏找到,以下:github
/* * 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() )
三、在終端執行構建操做前建議把終端改成bash,否則可能會有點問題。shell
具體步驟以下:json
#下載源碼 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了,以下:bash
#在源碼目錄下執行 ./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" }