编者按(2020年1月6日):这是用Elasticsearch 6.6编写和测试的。由于PR#48188中的更改,这些说明将不适用于7.5版和更高版本.
如果想了解Elasticsearch的内部工作原理,源代码是最终的权威。如果源代码已经下载,那么像IntelliJ IDEA这样功能齐全的集成开发环境(IDE)对于浏览、编辑和调试它非常有用。因此,在这篇博客文章中,我介绍了(1)如何下载Elasticsearch源代码,(2)如何在IntelliJ IDEA中设置Elasticsearch项目,以及(3)如何在IntelliJ IDEA中启动Java调试器。
环境
本博客中的说明已经在Mac OSX 10.14.2、IntelliJ IDEA 2018.3(社区版)和OpenJDK 11.0.2上进行了测试。
下载Elasticsearch
从github获取Elasticsearch源代码的副本,如下所示:
代码语言:shell复制git clone https://github.com/elastic/elasticsearch.git
签出您要调试的 Elasticsearch 版本的分支。
代码语言:shell复制cd elasticsearch
git checkout --track origin/6.6
查看分发中包含的文本文件
在 elasticsearch 目录中,有几个文本文件需要查看。特别是,CONTRIBUTING.md 包含对将 Elasticsearch 代码导入 IntelliJ IDEA 项目的过程的描述,而 TESTING.asciidoc 描述了构建和调试代码的方法。本博文的其余部分基于这些文件中的说明。
配置代码以与 IntelliJ IDEA 一起使用
Elasticsearch 使用的构建系统是 gradle,构建“Elasticsearch gradle tools”至少需要 Java 11。此外,Java 9 用于构建过程的一部分,如果未找到它,您将在构建代码时看到警告。确保您的 JAVA_HOME 和 JAVA9_HOME 环境变量设置正确。例如,我的 .bash_profile(在 OSX 上)中设置了我的 JAVA_HOME 和 JAVA9_HOME,如下所示:
代码语言:shell复制JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
export JAVA_HOME
JAVA9_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
export JAVA9_HOME
最后,执行以下命令来配置一个 Elasticsearch 项目以在 IntelliJ IDEA 中使用。
代码语言:shell复制./gradlew idea
执行上述命令可能需要几分钟时间,一旦完成,您的项目就可以导入 IntelliJ IDEA。
将 Elasticsearch 导入 IntelliJ IDEA 项目
- 打开 IntelliJ IDEA,如果您没有打开任何其他项目,您将看到如下图所示的屏幕。单击导入项目。
- 选择 elasticsearch 目录并单击打开。
- 选择 Import project from external model -> Gradle,然后点击 Next。
- 将 Gradle JVM 设置为 11,如下所示。然后点击完成。
- 完成上述步骤后,IntelliJ IDEA 将开始构建源代码。构建完成后,IntelliJ IDEA 窗口应类似于下图。
启动 Elasticsearch 进行调试
调试 Elasticsearch 的一种方法是使用以下命令从终端以调试模式启动项目:
代码语言:shell复制./gradlew run --debug-jvm
上述过程可能需要几分钟才能完全启动,此时您可以通过单击 Run -> Attach to Process 从 IntelliJ IDEA 连接到该过程,如下所示:
这将允许您选择要附加到的进程,该进程应类似于以下内容:
您现在应该能够设置断点并单步执行 Elasticsearch 和 Lucene 代码!
请注意,如果您不熟悉使用 IntelliJ IDEA 进行调试,可以在 IntelliJ IDEA 文档中找到帮助。
总结
在这篇博文中,我演示了如何在 IntelliJ IDEA 中设置一个项目,该项目将允许对 Elasticsearch 和 Lucene 源代码进行交互式调试。您现在已准备好深入研究 Elasticsearch 的内部工作原理!与往常一样,如果您有任何问题,请访问我们的讨论论坛。