栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

elasticsearch源码本地编译与开发

elasticsearch源码本地编译与开发

elasticsearch源码本地编译与开发 前言

为了方便学习elasticsearch(elasticsearch github传送门),很有必要在对代码进行编译,并在本地进行运行或调试。
本文记录了如何在本地通过idea打开es工程并编译源码,并且在idea中进行调试。

本地环境:
macOS:10.15.5
idea:2021.3.1(建议选用最新版本,之前碰到过由于idea版本过低导致无法正常导入的情况)
java:jdk15
es分支:7.10.2

以下步骤均针对于7.10.2版本,其它版本大同小异。

编译

1、下载es源码到本地
2、切换至需要使用的分支或者tag
切换到对应分支
git checkout branch_name
切换到对应tag
git checkout -b branch_name tag_name
为了切换到7.10.2所使用的tag
git checkout -b v7.10.2 v7.10.2
3、修改gradle仓库(切换到国内仓库)
添加文件到此路径下/Users/xxx/.gradle
文件名:init.gradle

allprojects{
    repositories {
        def REPOSITORY_URL = 'https://maven.aliyun.com/nexus/content/groups/public/'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                    remove repo
                }
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}

4、在代码根目录下执行
gradlew jar
正常情况下会最后输出:BUILD SUCCESSFUL
5、直接使用idea打开该工程
一般情况下即可正常导入。
若不能正常导入,检查idea中gradle的配置。主要关注一下3个地方的配置

本地调试

1、对elasticsearch进行打包,根据本地不同的系统,命令也不一致。
在macos下建议使用
gradlew distribution:archives:oss-no-jdk-darwin-tar:assemble
其它系统使用的打包可使用如下命令进行构建
gradlew distribution:archives:xxx:assemble
其中xxx用如下工程名进行替换

构建好的产物在代码根目录下
/distribution/archives/oss-no-jdk-darwin-tar/build/distributions
解压此工程,以便于后续使用。
2、打开org.elasticsearch.bootstrap.Elasticsearch,右键直接运行。
此时会出现异常,提示
ERROR: the system property [es.path.conf] must be set

添加vm option

-Des.path.home=/Users/XXX/Desktop/study/ElasticSearch/elasticsearch/distribution/archives/oss-no-jdk-darwin-tar/build/distributions/elasticsearch-7.10.2-SNAPSHOT
-Des.path.conf=/Users/XXX/Desktop/study/ElasticSearch/elasticsearch/distribution/archives/oss-no-jdk-darwin-tar/build/distributions/elasticsearch-7.10.2-SNAPSHOT/config
-Dlog4j2.disable.jmx=true
-Djava.security.policy=/Users/XXX/Desktop/study/ElasticSearch/elasticsearch/distribution/archives/oss-no-jdk-darwin-tar/build/distributions/elasticsearch-7.10.2-SNAPSHOT/config/elasticsearch.policy

其中 elasticsearch.policy中的内容如下

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

大致配置选项如下图所示

若出现如下异常信息:
java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader

需要修改server模块 build.gradle中84行
把compileonly project(':libs:elasticsearch-plugin-classloader')修改为compile project(':libs:elasticsearch-plugin-classloader')

成功启动后,即可正常使用es。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/734196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号