花了几天时间,终于完成了Elasticsearch的源码环境搭建和启动
感谢小旋峰的博客 https://blog.csdn.net/wwwdc1012/article/details/81978966
操作系统:win11
Elasticsearch 源码版本: 6.3.2
准备好装好 git 的 intellij idea
下载项目
首先 git clone https://github.com/elastic/elasticsearch.git
这一步花了很久,通过git bash每次下载一半就中断了,后来在 idea 里面 git -> clone 才成功
下载后切换分支
git checkout v6.3.2
还需要下载 gradle 4.5
官方链接 https://services.gradle.org/distributions/gradle-4.5-all.zip
将下载的gradle-4.5-all.zip包放到 elasticsearchgradlewrapper 目录下,确保和 elasticsearchgradlewrappergradle-wrapper.properties 在同级目录。
修改 elasticsearchgradlewrappergradle-wrapper.properties 的 distributionUrl:
distributionUrl=gradle-4.5-all.zip
其它地方不要改。
修改后可能的 gradle-wrapper.properties
distributionUrl=gradle-4.5-all.zip distributionbase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStorebase=GRADLE_USER_HOME distributionSha256Sum=6ac2f8f9302f50241bf14cc5f4a3d88504ad20e61bb98c5fd048f7723b61397e
后期编译时发现需要 JDK-9,10 或 11 都不行,我下载了 ORACLE 的 JDK-9
下载链接 http://www.oracle.com/technetwork/java/javase/downloads/index.html
一定要配置好JAVA_HOME,否则后期编译会报错。
国内下载国外仓库的jar包速度慢,需要替换Maven地址,设置为本地或者国内可用的Maven仓库。照着下面的步骤一步一步修改不要弄错。
找到 elasticsearchbenchmarksbuild.gradle 文件,修改文件里面的repositories-maven-url的值,配置为可用的仓库地址,譬如修改为阿里云maven地址 http://maven.aliyun.com/nexus/content/groups/public/,修改示例如下:
buildscript {
repositories {
maven {
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
}
}
上面同样的步骤修改一下 elasticsearchclientbenchmarkbuild.gradle 文件中仓库地址。
找到 USER_HOME/.gradle 文件夹,在下面创建新文件 init.gradle,输入下面的内容并保存。
allprojects{
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all {
ArtifactRepository repo ->
if (repo instanceof MavenArtifactRepository) {
def url = repo.url.toString()
if (url.startsWith('https://repo.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
remove repo
}
}
}
maven {
url REPOSITORY_URL
}
}
}
其中USER_HOME/.gradle/是自己的gradle安装目录,示例值:C:UsersAdministrator.gradle,
如果没有.gradle目录,可用自己创建,或者先执行第7步,等gradle安装后再回来修改。
在 elasticsearch源码的根目录 下,打开命令行(cmd),运行
gradlew idea
编译成功后打印日志:
BUILD SUCCESSFUL in 1m 23s编译及运行
启动类在 elasticsearch/server/src/main/org/elasticsearch/bootstrap 下的 Elasticsearch.java,右键 Run Elasticsearch.main(),可运行main方法。但在此之前还要做一些配置。
先在 elasticsearch 源码目录下新建一个 home 目录,在 https://www.elastic.co/downloads/elasticsearch 下载一个同版本号的 Elasticsearch6.3.2 发行版,解压,将 config 目录和 modules 目录都拷贝到 home 目录中。
打开Edit configurations,配置如下,IDEA 版本不同可能看到的窗口不一样,重要的是添加的 VM options 和 一定要 勾选上 Include dependencies with ‘Provided’ scope
添加的 VM options 如下,其中的 ‘D:myProjectselasticsearch’ 务必要换成自己的 elasticsearch 路径
-Des.path.conf=D:myProjectselasticsearchhomeconfig -Des.path.home=D:myProjectselasticsearchhome -Dlog4j2.disable.jmx=true -Djava.security.policy=D:myProjectselasticsearchhomeconfigjava.policy -Xms2g -Xmx2g
另外 在 home/config 目录下新建 java.policy 文件,填入如下内容
grant {
permission java.lang.RuntimePermission "createClassLoader";
};
一切顺利的话,运行 Elasticsearch.main() 方法,成功
浏览器输入 localhost:9200,看到
{
"name" : "_zdUPNW",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "NCOPZJVdQDSEBUBg5-FshQ",
"version" : {
"number" : "6.3.2",
"build_flavor" : "unknown",
"build_type" : "unknown",
"build_hash" : "Unknown",
"build_date" : "Unknown",
"build_snapshot" : true,
"lucene_version" : "7.3.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}



