Elasticsearch源码调试实操

环境准备

请严格按照以下版本操作,不同软件版本可能会出现兼容性问题导致失败
1.es源码:https://github.com/elastic/elasticsearch/archive/v7.8.0.zip
2.gradle-6.5-all.zip:https://services.gradle.org/distributions/
3.jdk14:https://www.oracle.com/java/technologies/downloads/
4.Groovy:https://dl.bintray.com/groovy/maven/apache-groovy-sdk-3.0.5.zip
5.es客户端:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-8-0

安装完设置gradle、Jdk、groovy的环境变量。

操作步骤

1.Gradle 换源成阿里云镜像源,提升依赖下载速度。在GRADLE_HOME 目录中的 init.d 路径下,创建文件 init.gradle ,并贴上如下内容:

allprojects{
    repositories {
        def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'
        def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
                if (url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
                if (url.startsWith('https://plugins.gradle.org/m2/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
                    remove repo
                }
            }
        }
        maven { url ALIYUN_REPOSITORY_URL }
        maven { url ALIYUN_GRADLE_PLUGIN_URL }
    }
}
  1. ElasticSearch 源码包换 Gradle 分发地址
    打开你下载下来的 ElasticSearch 源码包,进入目录 gradle/wrapper。然后将 之前下载的 gradle-6.5-all.zip,拷贝到该目录下。再打开文件 gradle-wrapper.properties,修改配置如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=gradle-6.5-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionSha256Sum=c9910513d0eed63cd8f5c7fec4cb4a05731144770104a0871234a4edc3ba3cef

3.导入源码,idea配置gradle
gradle用户主目录写你es源码的gradle目录,我的是D:/IDEA/elasticsearch-7.8.0/gradle;gradle JVM选JDK14,重新加载gradle项目的,等待es源码包构建完成

4.配置启动器
①创建一个Application编辑它。
②启动类(main class):org.elasticsearch.bootstrap.Elasticsearch
③classpath路径:elasticsearch-7.8.0.server.main
④jdk或jre环境选14
⑥VM Option:-Des.path.home=D:\elasticsearch\elasticsearch-7.8.0-windows-x86_64\elasticsearch-7.8.0
-Des.path.conf=D:\elasticsearch\elasticsearch-7.8.0-windows-x86_64\elasticsearch-7.8.0\config
-Dlog4j2.disable.jmx=true
-Xmx4g
-Xms4g
(这个千万注意:不要填到程序参数program arguments那去了,我就被坑了半天!!)
-Des.path.home – 指定上文中你所下载的 ElasticSearch 客户端安装路径;
-Des.path.conf – 指定客户端安装路径中的配置路径
⑧打开你所配置的 JAVA_HOME/conf/security/java.policy 文件,
在文件中的 grant 结构末尾加上以下权限指令:

permission java.lang.RuntimePermission "createClassLoader";

⑨记得在配置文件中设置 node.name, 不然会启动失败,报空指针错误
tips:因为es启动需要conf,data,log等四个文件,源码内部没有所以要指向外部,之前下载es客户端也就是用在这,同理如果你要连接linux上的es就要在linux环境装es并远程调试源码,总之源码要和es客户端一个环境

好了,到这里就可以启动源码了。正常来说没有问题,如果不幸还有问题完全可以打断点进行调试排查问题。

补充:远程remote调试Linux环境es源码
未完待续…………

常见启动报错

1.classLoad 加载报错:java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader
解决方法:将compileOnly project(‘:libs:plugin-classloader’)的compileOnly改为compile即可,同时创建application启动器 时User classpath of module 也要勾选好
2.classLoad 权限报错:org.elasticsearch.bootstrap.StartupException: java.security.AccessControlException: access denied (“java.lang.RuntimePermission” “createClassLoader”)
解决方法:打开你所配置的 JAVA_HOME/conf/security/java.policy 文件,
在文件中的 grant 结构末尾加上以下权限指令:
permission java.lang.RuntimePermission “createClassLoader”;
permission javax.management.MBeanTrustPermission “register”;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值