版本要求
我们编译的是 Elasticsearch 7.14.1 版本,在源码根目录下的 CONTRIBUTING.md 文件中说明了 IntelliJ 和 JDK 的版本要求,Gradle 我们可以不必自行安装,在编译的时候会自动使用源码根目录下 gradlew 脚本进行安装。
- IntelliJ 2020.1 以上
- JDK 16
- Gradle 7.1
配置 JDK 环境
这里推荐使用 sdkman 来管理不同的 JDK 版本,sdkman 是一个用于管理多个软件开发工具包并行版本的工具,它提供了一个方便的命令行界面 (CLI) 和 API,用于列出、安装、切换、删除软件版本。
sdkman 对 Java 开发人员特别有用,支持 JVM 的 SDK,例如 Java,Groovy,Scala,Kotlin,Gradle,Maven,Spring Boot 和许多其他工具。sdkman 支持所有主要的 Unix 操作系统,可以安装在 macOS,Linux,WSL,Cygwin,Solaris,FreeBSD 等系统上,并且支持 bash 和 zsh。
你也可以按照常规的方式安装 Java,只要保证 JDK 是 16 版本即可。
安装 sdkman
执行以下命令安装 sdkman:
curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh"
查看 sdk 版本:
❯ sdk version ==== BROADCAST ================================================================= * 2021-09-16: leiningen 2.9.7 available on SDKMAN! * 2021-09-11: grails 5.0.0-RC3 available on SDKMAN! * 2021-09-07: mvnd 0.6.0 available on SDKMAN! https://git.io/Jucy6 ================================================================================ SDKMAN 5.12.4
安装 JDK
查看支持的 Java 版本:
Available Java Versions ================================================================================ Vendor | Use | Version | Dist | Status | Identifier -------------------------------------------------------------------------------- Corretto | | 17.0.0.35.2 | amzn | | 17.0.0.35.2-amzn | | 17.0.0.35.1 | amzn | | 17.0.0.35.1-amzn | | 16.0.2.7.1 | amzn | | 16.0.2.7.1-amzn | | 11.0.12.7.2 | amzn | | 11.0.12.7.2-amzn | | 8.302.08.1 | amzn | | 8.302.08.1-amzn GraalVM | | 21.2.0.r16 | grl | | 21.2.0.r16-grl | | 21.2.0.r11 | grl | | 21.2.0.r11-grl | | 20.3.3.r11 | grl | | 20.3.3.r11-grl | | 19.3.6.r11 | grl | | 19.3.6.r11-grl Java.net | | 18.ea.15 | open | | 18.ea.15-open | | 18.ea.2.lm | open | | 18.ea.2.lm-open | | 17 | open | | 17-open | | 17.ea.3.pma | open | | 17.ea.3.pma-open | | 16.0.2 | open | | 16.0.2-open | | 11.0.2 | open | | 11.0.2-open Liberica | | 17.0.0.fx | librca | | 17.0.0.fx-librca | | 17.0.0 | librca | | 17.0.0-librca | | 16.0.2.fx | librca | | 16.0.2.fx-librca | | 16.0.2 | librca | | 16.0.2-librca | | 11.0.12.fx | librca | | 11.0.12.fx-librca | | 11.0.12 | librca | | 11.0.12-librca | | 8.0.302.fx | librca | | 8.0.302.fx-librca | | 8.0.302 | librca | | 8.0.302-librca Liberica NIK | | 21.2 | nik | | 21.2-nik Microsoft | | 16.0.2.7.1 | ms | | 16.0.2.7.1-ms | | 11.0.12.7.1 | ms | | 11.0.12.7.1-ms SapMachine | | 17 | sapmchn | | 17-sapmchn | | 16.0.2 | sapmchn | | 16.0.2-sapmchn | | 11.0.12 | sapmchn | | 11.0.12-sapmchn Semeru | | 16.0.2 | sem | | 16.0.2-sem | | 11.0.12 | sem | | 11.0.12-sem | | 8.0.302 | sem | | 8.0.302-sem Temurin | | 16.0.2 | tem | | 16.0.2-tem | | 11.0.12 | tem | | 11.0.12-tem | | 8.0.302 | tem | | 8.0.302-tem Trava | | 11.0.9 | trava | | 11.0.9-trava | | 8.0.232 | trava | | 8.0.232-trava Zulu | | 17.0.0 | zulu | | 17.0.0-zulu | | 17.0.0.fx | zulu | | 17.0.0.fx-zulu | | 16.0.2 | zulu | | 16.0.2-zulu | | 16.0.2.fx | zulu | | 16.0.2.fx-zulu | | 11.0.12 | zulu | | 11.0.12-zulu | | 11.0.12.fx | zulu | | 11.0.12.fx-zulu | | 8.0.302 | zulu | | 8.0.302-zulu | | 8.0.302.fx | zulu | | 8.0.302.fx-zulu | | 7.0.312 | zulu | | 7.0.312-zulu ================================================================================ Use the Identifier for installation: $ sdk install java 11.0.3.hs-adpt
安装 OpenJDK 16 版本:
sdk install java 16.0.2-open
查看当前 Java 版本:
#查看 sdkman 管理的版本 ❯ sdk current Using: java: 16.0.2-open #查看当前 java 版本 ❯ java -version openjdk version "16.0.2" 2021-07-20 OpenJDK Runtime Environment (build 16.0.2+7-67) OpenJDK 64-Bit Server VM (build 16.0.2+7-67, mixed mode, sharing)
关于 sdkman 的管理命令可以参考 sdkman usage。
源码导入 IntelliJ Idea
打开 IntelliJ Idea,点击 Open or Import。
mkdir -p /Users/chengzhiwei/data/elasticsearch/ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.1-darwin-x86_64.tar.gz tar -xzvf elasticsearch-7.14.1-darwin-x86_64.tar.gz -C /Users/chengzhiwei/data/elasticsearch #创建数据存放目录 mkdir /Users/chengzhiwei/data/elasticsearch/elasticsearch-7.14.1/data
点击右上角 Edit Configurations,创建一个 Application 启动配置。
#上面 Elasticsearch 发行版的路径 -Des.path.home=/Users/chengzhiwei/data/elasticsearch/elasticsearch-7.14.1 -Des.path.conf=/Users/chengzhiwei/data/elasticsearch/elasticsearch-7.14.1/config #安全策略 -Djava.security.policy=/Users/chengzhiwei/data/elasticsearch/elasticsearch-7.14.1/config/elasticsearch.policy -Dlog4j2.disable.jmx=true -Xmx2g -Xms2g
- Use classpath of module:选择启动类所在 module。
- JRE:选择安装的 JDK 16。
grant { permission javax.management.MBeanTruxtPermission "register"; permission javax.management.MBeanServerPermission "createMBeanServer"; permission java.lang.RuntimePermission "createClassLoader"; permission java.lang.RuntimePermission "getClassLoader"; permission java.lang.RuntimePermission "setContextClassLoader"; permission org.elasticsearch.ThreadPermission "modifyArbitraryThreadGroup"; };
点击启动。
- [idea运行es7.13.2报Unknown codebases异常] (https://elasticsearch.cn/question/11513)
- [ElasticSearch-7.8.0 源码编译调试 (详细)] (https://zhuanlan.zhihu.com/p/188725714)
- [讲得最明白的Elasticsearch源码调试环境搭建教程] (https://cloud.tencent.com/developer/article/1683325)
- [IntelliJ IDEA远程调试Elasticsearch6.1.2] (https://blog.csdn.net/boling_cavalry/article/details/89417650)