Easticsearch从0学到1之源码阅读环境搭建

Easticsearch从0学到1之源码阅读环境搭建

本文选择的是elasticsearch6.4.2版本的

前提环境

jdk11(依据elasticsearch的版本而定),目前Oracle官网只能下载jdk8和11,这两个版本目前是长期支持的版本。
gradle 4.9(elasticsearch是使用gradle构建的)http://services.gradle.org/distributions/
elasticsearch6.4(github上拉取源码,以及下载对应的发布版)
如果是在windows,建议系统为专业版以上,家庭版好像是无法创建pid文件
直接从github上clone会非常慢,建议在码云上创建个elasticsearch的项目,然后把在github上的项目导入到码云上,这样会速度比较快。如图1-1所示。
Easticsearch从0学到1之源码阅读环境搭建
图1-1

修改部分配置

修改全局Maven仓库地址

提前安装好gradle。在USER_HOME/.gradle/下面创建新文件 init.gradle,输入下面的内容并保存。

allprojects{
     repositories {
         def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
         all {
             ArtifactRepository repo ->
     if (repo instanceof MavenArtifactRepository) {
                 def url = repo.url.toString()
                 if (url.startsWith('https://repo.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                     project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                     remove repo
                 }
             }
         }
         maven {
             url REPOSITORY_URL
         }
     }
 }

其中USER_HOME/.gradle/是自己的gradle安装目录,示例值:C:\Users\Administrator\.gradle
如果没有.gradle目录,可用自己创建,或者先执行 编译源码 ,等gradle安装后再回来修改。
上面脚本把url匹配到的仓库都替换成了阿里云的仓库(如果不修改,访问国外的网址会很慢,甚至不成功)。

gradle编译源码

windows运行cmd,进入DOS命令行,然后切换到elasticsearch源码的根目录,执行如下命令,把elasticsearch编译为 idea 工程:
gradlew idea
编译失败则按照错误信息解决问题,可用使用如下命令帮助定位问题:

gradlew idea -info
 gradlew idea -debug

一般是Maven仓库地址不可用导致jar包无法下载,从而编译失败,此时请修改相关的仓库地址。
编译成功后打印日志:

BUILD SUCCESSFUL in 1m 23s

导入elasticsearch项目到idea

需要的参数

VM options

-Des.path.home=E:\eshome  -Des.path.conf=E:\eshome\config -Xms1g -Xmx1g -Dlog4j.disable.jmx=true -Djava.security.policy=E:\eshome\config\elasticsearch.policy
参数 说明
-Des.path.home 指定eshome目录所在路径名
-Des.path.conf 指定配置文件所在路径
-Xms1g 设置JVM初始堆内存大小为1G
-Xmx1g 设置JVM最大允许分配的堆内存大小为1G
-Dlog4j.disable.jmx=true 这个是jvm.options文件中的默认配置,不加会报“access denied”等错误。但在IDE中启动elasticsearch不会加载jvm.options文件,这个文件是在Elasticsearch的启动脚本elasticsearch、elasticsearch.bat中加载的
-Djava.security.policy 同样是权限问题(不配置的话部分环境环境变量上会遇到access denied问题),配置policy文件路径,policy文件内容如下:

eshome/config/elasticsearch.policy

grant{
            permission javax.management.MBeanTruxtPermission "register"; 
            permission javax.management.MBeanServerPermission "createMBeanServer";
            permission java.lang.RuntimePermission "createClassLoader";
        } ;

可以复制发布版的 config modules plugins (elasticsearch启动时需要加载这几个目录,找到相应配置)到eshome下面
Easticsearch从0学到1之源码阅读环境搭建

参考资料

[1] JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止https://blog.****.net/u013256816/article/details/50417822
[2] Java安全——安全管理器、访问控制器和类装载器 SecurityManager https://blog.****.net/wwwdc1012/article/details/82287474
[3] 渣渣菜鸡的 ElasticSearch 源码解析 —— 环境搭建https://www.jianshu.com/p/a9f66ea2c84a
[4] 教你编译调试Elasticsearch 6.3.2源码https://blog.****.net/wwwdc1012/article/details/81978966