1. es源碼地址:github.com/elastic/ela…,建議fork一份到本身倉庫,後面閱讀代碼寫註釋能夠推到本身的倉庫。java
2.JDK:1.8git
3.gradle:4.10 因爲es基於gradle構建代碼,因此提早裝好gradle。github
4.os:macbootstrap
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
運行org.elasticsearch.bootstrap.Elasticsearide
啓動的時候會出現一些問題:gradle
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
配置好啓動參數後,再次運行出現報錯:
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
配置好新的安全策略後,從新啓動。出現:
ERROR: no log4j2.properties found; tried [/Users/zjb/code/mine/commit/elasticsearch/myconfig] and its subdirectories
這個錯誤主要是沒有配置文件引發的,能夠將distribution模塊下src/config/log4j2.properties放到配置文件myconfig目錄下
配置好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目錄下。
將modules拷貝過來後,從新啓動es。出現
java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader
這是由於server模塊顯得build.gradle編譯項爲compileOnly project(':libs:plugin-classloader')
修改compileOnly 爲compile 從新編譯
從新啓動後又出現permission的問題
org.elasticsearch.bootstrap.StartupException: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createClassLoader")
利用三.2中的思路,在elasticsearch.yml中添加配置項:
permission java.lang.RuntimePermission "createClassLoader";複製代碼
而後從新啓動。
啓動後,訪問http://localhost:9200/
啓動成功,大功告成,終於能夠debug
Elasticsearch的源碼編譯和啓動過程會遇到一些問題,可能每一個版本會有細微的差異,再用此文章編譯運行的時候,最好選擇和筆者相同的ES版本。