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,选中刚才启动的程序
Java进阶
扫码关注 不迷路
微信:c1041067258