概述
想读ElasticSearch源码,从git上拉取代码,导入idea。就是这么简单的一个想法,记录一下过程。
1.准备
1.1哪个版本?
ElasticSearch版本更新真的是很快,每个版本都有大量的新特性,想读源码之前总得闹清楚,想读哪个版本的吧?
本文用5.6.16 为什么是这个版本?
(1)5.x版本,这个版本应该是最新的,公司的ES集群还在5.x,没有进行大的升级
(2)其他版本,导入过程bug满天飞,主要是国内网络,很多包不能下载
1.2环境准备
(1)idea版本:2018.2.5
(2)elasticsearch git地址:https://github.com/elastic/elasticsearch 5.6.16版本的ElasticSearch需要从tag中拉取,如下图示
(3)jdk 版本:版本选择,看这里https://www.elastic.co/guide/en/elasticsearch/reference/5.6/_installation.html
(4)gradle版本:选定分支后,在github上查找“elasticsearch/gradle/wrapper/gradle-wrapper.properties”目录,确定gradle版本
(5)elasticsearch的压缩包,https://www.elastic.co/cn/downloads/past-releases/# 选择对应和源码版本一致的zip文件,如果官网下载太慢,有个国内的镜像网站:https://thans.cn/mirror/elasticsearch.html
1.3注意事项
(1)elasticsearch版本发生变化时,jdk和gradle版本也会发生变化
(2)gradle注意使用国内阿里镜像(网上很多配置)
(3)gradle和idea配置的时候,记得使用自定义的gradle,同时offline work不选,如下图示:
2.源码编译及导入Idea
这个过程,参考教你编译调试Elasticsearch 6.3.2源码即可。
3.Bug&Execption
(1)修正一下教你编译调试Elasticsearch 6.3.2源码小问题:
-Des.path.home=D:BDLToolsElasticelasticsearchelasticsearch-5.6.16
-Des.path.conf=D:BDLToolsElasticelasticsearchelasticsearch-5.6.16config
-Dlog4j2.disable.jmx=true
-Djava.security.policy=D:BDLToolsElasticelasticsearchelasticsearch-5.6.16configjava.policy
-Des.path.home=指向zip文件解压后的地址,不必要在源码中新建home文件夹
(2)按照上述流程,走完,启动ES,发现如下问题
[2020-01-09T18:46:05,714][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[main/:?]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) ~[main/:?]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70) ~[main/:?]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) ~[main/:?]
at org.elasticsearch.cli.Command.main(Command.java:90) ~[main/:?]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[main/:?]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[main/:?]
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1967) ~[?:1.8.0_231]
at org.elasticsearch.bootstrap.Security.readPolicy(Security.java:220) ~[main/:?]
at org.elasticsearch.bootstrap.Security.getPluginPermissions(Security.java:177) ~[main/:?]
at org.elasticsearch.bootstrap.Security.configure(Security.java:119) ~[main/:?]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:228) ~[main/:?]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[main/:?]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[main/:?]
... 6 more
单步调试,发现问题:elasticsearchcoresrcmainjavaorgelasticsearchbootstrapSecurity.java,修改如下
//final String esVersion = Version.CURRENT + (Build.CURRENT.isSnapshot() ? "-SNAPSHOT" : "");
final String esVersion = Version.CURRENT.toString();
同时修改elasticsearchcoresrcmainjavaorgelasticsearchVersion.java,应该是v_5_6_17未发布,需要修正一下,如下所示:
//public static final Version CURRENT = V_5_6_17_UNRELEASED;
public static final Version CURRENT = V_5_6_16;
(3)启动ElasticSearch,正常
打开,http://localhost:9200/,如下所示,之后可以阅读代码了
参考
教你编译调试Elasticsearch 6.3.2源码
Intellij Idea编译Elasticsearch源码
Eleaticsearch源码分析(一)编译启动
最后
以上就是羞涩鲜花为你收集整理的ElasticSearch源码(一)ElasticSearch5.6.16源码导入idea环境搭建1.准备 2.源码编译及导入Idea3.Bug&Execption参考的全部内容,希望文章能够帮你解决ElasticSearch源码(一)ElasticSearch5.6.16源码导入idea环境搭建1.准备 2.源码编译及导入Idea3.Bug&Execption参考所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复