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版本。