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。
|