elasticsearch5.5.3 源码学习 idea下源码编译
1、学习elasticsearch 源码,通过搜索“elasticsearch源码”,进行相关搜索。
2、因源码gradle编译,选择gradle-3.5可以编译通过,对应elasticsearch 5.5.0,其他高版本gradle可能编译不过,
编译源码时需注意这一点。
3、elasticsearch版本选择tag 版,tag为发布版,配置与代码一致。
4、依赖jdk版本为1.8,idea设置ProjectSetting Project jdk版本,以及gradle jdk版本,以及complie jdk版本
5、idea -Des.path.home=D:\source\elasticsearch-5.5.3 -Dlog4j2.disable.jmx=true -Dtests.security.manager=false
idea相关配置解决编译时各种报错。
以及主class配置、以及classpath of module配置。
5、jdk 1.8版本前几个版本jdk编译lambda存在bug,需要高版本jdk。
6、idea module配置是core_main。
7、module下jar采用对应发布版下module,里面为编译好的jar包。
8、编译时plugins文件夹要有内容运行时可以没有内容。
9、elasticsearch release版本下载链接 https://www.elastic.co/downloads/past-releases
可能遇到的异常
-
ERROR: the system property [es.path.conf] must be set
原因是没有指定es.path.conf,设置-Des.path.conf=你调试源码版本对应的conf目录
-
Exception in thread "main" java.lang.IllegalStateException: path.home is not configured
原因是因为没有为elasticsearch配置path.home参数,可以在Edit Configuation中设置虚拟机参数:-Des.path.home=你下载的对应的elasticsearch的安装目录,这么做的原因 是elasticsearch在启动中会加载一些默认配置以及插件,我们直接加载elasticsearch安装目录下的配置和插件即可,后面会在源码中体现
-
2017-06-23 14:00:44,760 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
原因是因为elasticsearch在启动过程中使用到了jmx,我们这里禁止使用即可,配置也是在Edit Configuation中设置虚拟机参数 -Dlog4j2.disable.jmx=true
-
org.elasticsearch.bootstrap.StartupException: org.elasticsearch.bootstrap.BootstrapException: java.lang.IllegalStateException: jar hell!或Classname: org.elasticsearch.search.aggregations.matrix.MatrixAggregationPlugin due to jar hell
原因是因为elasticsearch中大量存在一个类或一个资源文件存在多个jar中,我们注释掉相应代码即可,主要是PluginsService中374行的JarHell.checkJarHell(union)以及 Bootstrap中220行的JarHell.checkJarHell(),最简单的方式就是将JarHell.checkJarHell()中的方法体注释掉
-
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: plugin [aggs-matrix-stats] is incompatible with version [7.0.0-alpha1]; was designed for version [5.6.1]
原因是一般情况下我们调试的源码非某个发布版本,有些配置项并未发布,我们的配置与当前代码的版本匹配不上,这个时候我们需要将调试的源码设置成某个发布版本,一般来说,Elasticsearch每发布 一个稳定版本,都会有一个对应的tag,我们进入到ES源码目录下执行git tag, 我这里调试的版本为v5.6.1,所以执行git checkout v5.6.1,切换到v5.6.1tag.
参考链接:
https://bugs.openjdk.java.net/browse/JDK-8129589
待续。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?