Elasticsearch源碼編譯運行

1、源碼環境

1. es源碼地址:github.com/elastic/ela…,建議fork一份到本身倉庫,後面閱讀代碼寫註釋能夠推到本身的倉庫。java

2.JDK:1.8git

3.gradle:4.10 因爲es基於gradle構建代碼,因此提早裝好gradle。github

4.os:macbootstrap

2、開始編譯

1. git checkout -b 6.5.4 v6.5.4。 本系列文章都是基於6.5.4版本的,因此源碼固然也是從6.5.4版本入手了。安全

2.在當前目錄執行:gradle idea。編譯時間可能有點長,當最後出現 BUILD SUCCESSFUL,編譯完成。bash

3.導入idea。elasticsearch

3、運行調試

運行org.elasticsearch.bootstrap.Elasticsearide

ch

啓動的時候會出現一些問題:gradle

1.配置文件問題:

ERROR: the system property [es.path.conf] must be set
ui

在啓動類中添加配置config配置路徑:

-Des.path.conf=/Users/zjb/code/mine/commit/elasticsearch/myconfig,能夠把elasticsearch.yml丟在改文件下,若是沒有的話,讀取默認配置


從新運行後出現錯誤

Exception in thread "main" java.lang.IllegalStateException: path.home is not configured 

須要在啓動參數添加配置:

-Des.path.home=/Users/zjb/code/mine/commit/elasticsearch/data

2.java.security問題

配置好啓動參數後,再次運行出現報錯:

2019-07-26 19:51:12,943 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register") 

新建一個elasticsearch.policy文件,內容爲:

grant{   permission javax.management.MBeanTrustPermission "register";   
permission javax.management.MBeanServerPermission "createMBeanServer";
};複製代碼

而後再啓動參數中指定新的policy文件:

-Djava.security.policy=/Users/zjb/code/mine/commit/elasticsearch/elasticsearch.policy

3.log4j2配置問題

配置好新的安全策略後,從新啓動。出現:

ERROR: no log4j2.properties found; tried [/Users/zjb/code/mine/commit/elasticsearch/myconfig] and its subdirectories 

這個錯誤主要是沒有配置文件引發的,能夠將distribution模塊下src/config/log4j2.properties放到配置文件myconfig目錄下

4.modules缺失

配置好log的問題後,又出現了

org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: modules directory [/Users/zjb/code/mine/commit/elasticsearch/data/modules] not found 

這個問題主要是因爲,沒有檢測到對應的modules引發的,這個問題最簡單的辦法就是下一個與源碼版本號一隻的Elasticsearch的bin版本,講裏面對應的modules拷貝到配置的path.home目錄下。

5.編譯項修改

將modules拷貝過來後,從新啓動es。出現

java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader 

這是由於server模塊顯得build.gradle編譯項爲compileOnly project(':libs:plugin-classloader')

修改compileOnly 爲compile 從新編譯

6.RuntimePermission問題

從新啓動後又出現permission的問題

org.elasticsearch.bootstrap.StartupException: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createClassLoader") 

利用三.2中的思路,在elasticsearch.yml中添加配置項:

permission java.lang.RuntimePermission "createClassLoader";複製代碼

而後從新啓動。

7.終於啓動

啓動後,訪問http://localhost:9200/


啓動成功,大功告成,終於能夠debug

4、總結

Elasticsearch的源碼編譯和啓動過程會遇到一些問題,可能每一個版本會有細微的差異,再用此文章編譯運行的時候,最好選擇和筆者相同的ES版本。

相關文章
相關標籤/搜索