6.5
源码编译启动
安装教程这里就不写了,百度下怎么安装就行版本我这安装的最新版
配置阿里云加速,找到安装的根目录,我这里是 /Users/cxt,在 mac 上就波浪线的目录,自己根据自己系统找到 gradle 安装目录即可
创建 init.gradle
cd /Users/cxt # 此目录下有个隐藏文件夹gradle,注意小数点 cd .gradle vim init.gradle
init.gradle 内容如下
allprojects{ repositories { def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/' def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter/' def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/' 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_JCENTER_URL." remove repo } if (url.startsWith('https://dl.google.com/dl/android/maven2/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_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_JCENTER_URL } maven { url ALIYUN_GOOGLE_URL } maven { url ALIYUN_GRADLE_PLUGIN_URL } } }
- 环境
- mac os 14
- jdk-11
- gradle
- 本地 拉取 elasticsearch 源码放置位置,下面配置都是此为基础 /cxt/codework/github/es65/elasticsearch,最后一级为源码根目录
- gradle 安装配置阿里云地址加速
- 拉取源码
https://github.com/elastic/elasticsearc
- 切换分支 6.5
cd elasticsearch git checkout 6.5
- 下载同版本二进制安装包为后面启动做准备,此处下载 6.5.4 的对应版本,6.5 的最高子版本,其它版本可自行查阅
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz // 其它版本参考链接 https://www.elastic.co/downloads/past-releases#elasticsearch
- 下载 gradle-4.10-all.zip为什么下载这个版本呢,是因为我在下载完 elasticsearch 源码之后,查看 elasticsearch/gradle/wrapper/gradle-wrapper.properties 里面 distributionUrl 指定的为 gradle-4.10-all.zip 鉴于国内网络原因,先下载下来,更改使用本地
- 下载 gradle-4.10-all.zip
https://services.gradle.org/distributions/gradle-4.10-all.zip
- 复制 gradle-4.10-all.zip 到 elasticsearch/gradle/wrapper/gradle-4.10-all.zip,与 gradle-wrapper.properties 同级
- 更改 elasticsearch/gradle/wrapper/gradle-wrapper.properties 内容如下,主要是 distributionUrl 指定同级别目录下的 gradle-4.10-all.zip 即可
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=gradle-4.10-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionSha256Sum=fc049dcbcb245d5892bebae143bd515a78f6a5a93cec99d489b312dc0ce4aad9
- 执行编译 为做导入 idea 做准备
cd elasticsearch # 执行编译idea命令,如果报错可以根据提示加入命令参考排查,我这执行了一下./gradlew build 然后在执行gradle idea 就成功了 ./gradlew idea
- 导入 idea
- 上一步 gradlew idea 执行成功之后会在 elasticsearch 目录下面生成一个
elasticsearch.ipr
文件,此时打开 idea ,选择 open 这个 ipr 文件即可自动导入
注意:此处导入方式可使用 idea import Project ,但是本人在使用中发现导入不进去,然后使用 open elasticsearch.ipr 的方式可以正常启动,这个看个人情况吧
openes
- 导入之后选择右上角 Project Structure ,设置项目 JDK 为 11
- 打开 gradle 设置,设置 gradle 中 Grad 了 JVM 为 Use Project JDK
-
- 复制二进制安装文件导入源码编译文件夹
- 解压刚才下载的 elasticsearch-6.5.4.tar.gz 压缩包
- 复制 elasticsearch-6.5.4/config 文件夹到源码 elasticsearch/config
- elasticsearch/config 下新建 java.policy
内容为
grant { permission java.lang.RuntimePermission "createClassLoader"; };
- 在源码 elasticsearch 文件夹下新建文件夹 home
- 复制 elastic search-6.5.4/modules 到源码 elasticsearch/home/modules
- 完成的目录结构大体如下
elasticsearch(6.5 分支)
------ config
------ home
------module - 执行启动代码
org.elasticsearch.bootstrap.Elasticsearch#main
- 启动 es
执行 main 方法 - 访问 http://localhost:9200/ 启动成功
- 设置 include dependencies
- 编辑启动配置
VM options 加入参数,参数含义见下方启动问题解决模块解析
-Des.path.conf=/cxt/codework/github/es65/elasticsearch/config -Des.path.home=/cxt/codework/github/es65/elasticsearch/home -Djava.security.policy=/cxt/codework/github/es65/elasticsearch/config/java.policy -Dlog4j2.disable.jmx=true
- 启动类位置
启动问题解决
- 问题 1: the system property [es.path.conf] must be set
解决:加入下方启动参数
-Des.path.conf=/cxt/codework/github/es65/elasticsearch/config
- 问题 2: Exception in thread "main" java.lang.IllegalStateException: path.home is not configured
解决:加入下方启动参数
-Des.path.home=/cxt/codework/github/es65/elasticsearch/home
- 问题 3: Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")解决:
- 新建 java.policy
grant { permission java.lang.RuntimePermission "createClassLoader"; };
- 加入启动参数
-Djava.security.policy=/cxt/codework/github/es65/elasticsearch/config/java.policy -Dlog4j2.disable.jmx=true
- 问题 4: Plugin [percolator] was built for Elasticsearch version 6.5.4 but version 6.5.5 is running
解决:
注释掉 org.elasticsearch.plugins.PluginsService 里面 verifyCompatibility(bundle.plugin);这一行代码
attach 进程调试(一种更简单的调试源码方式)
- 拉取代码切换分支启动 debug 调试
git checkout 6.5 ./gradlew run --debug-jvm
- 打开 idea attach 进程,位置 Run-->Attach to Process,选中刚才启动的程序