翻译:如何在intellij idea中调试elasticsearch源代码

2022-08-06 00:16:55 浏览数 (1)

编者按(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 项目

  1. 打开 IntelliJ IDEA,如果您没有打开任何其他项目,您将看到如下图所示的屏幕。单击导入项目。
  2. 选择 elasticsearch 目录并单击打开。
  1. 选择 Import project from external model -> Gradle,然后点击 Next。
  1. 将 Gradle JVM 设置为 11,如下所示。然后点击完成。
  1. 完成上述步骤后,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 的内部工作原理!与往常一样,如果您有任何问题,请访问我们的讨论论坛。

0 人点赞