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

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

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

前提环境

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

拷贝文件
将下载的gradle-4.9-all.zip包放到 elasticsearch\gradle\wrapper 目录下, 与 elasticsearch\gradle\wrapper\gradle-wrapper.properties 在同级目录,再修改 elasticsearch\gradle\wrapper\gradle-wrapper.properties 配置如下:
distributionUrl=gradle-4.9-all.zip
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

复制modules plugins config 到eshome目录下,可以选择从对应版本的官方二进制包中复制

参数说明
-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下面
在这里插入图片描述

报错

[2019-07-14T09:24:58,207][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [] fatal error in thread [main], exiting
java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader
  at org.elasticsearch.plugins.PluginsService.loadBundle(PluginsService.java:538) ~[main/:?]
  at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.java:464) ~[main/:?]
  at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:156) ~[main/:?]
  at org.elasticsearch.node.Node.<init>(Node.java:315) ~[main/:?]
  at org.elasticsearch.node.Node.<init>(Node.java:256) ~[main/:?]
  at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:213) ~[main/:?]
  at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:213) ~[main/:?]
  at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[main/:?]
  at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[main/:?]
  at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[main/:?]
  at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[main/:?]
  at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[main/:?]
  at org.elasticsearch.cli.Command.main(Command.java:90) ~[main/:?]
  at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[main/:?]
  at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[main/:?]
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader
  at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) ~[?:?]
  at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[?:?]
  at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
  ... 15 more

解决办法:
在这里插入图片描述

参考资料

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值