Учил вас идеей, чтобы запустить отладчик Elasticsearch Source!

Elasticsearch

Зачем делать этот контент

Недавно купил книгу "Анализ и оптимизация исходного кода Elasticsearch", вторая глава

Подготовьте среду сборки и отладки

Но попробовав, она закончилась неудачей.Я думаю, что многие из друзей, прочитавших эту книгу, наверняка сталкивались с таким. Невозможность запустить отладочный исходный код, по сути, означает, что эта книга заранее окончена.

Поэтому я собирал информацию в интернете, и сам пробовал, и в итоге получилось, и поделился своим опытом со всеми.

Готов к работе

  • java 1.8
  • Elasticsearch 6.1.2
  • win7
  • Intellij IDEA 2018.1.6 x64
  • gradle 4.3

Импорт проекта

1. Загрузите исходный код es

кликните сюда
Выберите исходный код в формате zip, чтобы загрузить и разархивировать его.

2. Скачать градиент

Какую версию мне скачать?
Откройте файл \elasticsearch-6.1.2\gradle\wrapper\gradle-wrapper.properties, и вы увидите следующее:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.3-all.zip
distributionSha256Sum=b3afcc2d5aaf4d23eeab2409d64c54046147322d05acc7fb5a63f84d8a2b8bd7

Очевидно, требуется версия gradle4.3
Адрес загрузки Gradle 4.3

Здесь мы загружаем и помещаем пакет gradle-4.3-all.zip вelasticsearch\gradle\wrapperкаталог, убедитесь, чтоelasticsearch\gradle\wrapper\gradle-wrapper.propertiesкаталог того же уровня, а затем изменитьelasticsearch\gradle\wrapper\gradle-wrapper.propertiesКонфигурация выглядит следующим образом:

distributionUrl=gradle-4.3-all.zip

3. Измените адрес хранилища Maven

На самом деле, этот шаг не предназначен специально для этой статьи, в основном из-за слишком низкой скорости загрузки иностранного репозитория maven по умолчанию!

Таким образом, этот шаг относится ко всем проектам, которым необходимо загрузить зависимости maven.

Конечно, если ты за границей, когда я не говорил

Необходимо изменить конфигурацию URL-адреса maven для следующих файлов:

  • elasticsearch\benchmarks\build.gradle
  • elasticsearch\client\benchmark\build.gradle

Найдите в вышеуказанных двух файлахrepositories-maven-urlЗначение , настроенное как адрес maven Alibaba Cloud:maven.aliyun.com/Nexus/conte…

Измените адрес глобального репозитория Maven: в$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:\Users\Administrator.gradle, Если каталога .gradle нет, вы можете создать его самостоятельно или сначала выполнить шаг 7, а затем вернуться и изменить его после установки gradle. Приведенный выше скрипт заменяет склад, соответствующий URL-адресу, на склад Alibaba Cloud, Если есть несопоставленные, которые вызывают сбой компиляции, вы можете добавить соответствующие условия самостоятельно.

4. Скомпилируйте исходный код с помощью gradle

Windows запускает cmd, входит в командную строку DOS, затем переключается в корневой каталог исходного кода elasticsearch и выполняет следующую команду для компиляции elasticsearch в проект идеи:

gradlew idea

Распечатайте лог после компиляции:

BUILD SUCCESSFUL in 3m 03s

5. Импортируйте проект в идею

в идееFile -> New Project From Existing SourcesВыберите корневой каталог Elasticsearch, который вы загрузили, затем нажмитеopen,послеImport project from external model -> Gradle, установите флажок Использовать автоимпорт. Затем подождите, пока градиент идеи снова скомпилируется.

Стартовый проект

Метод запуска ESelasticsearch/server/src/main/org/elasticsearch/bootstrap/Elasticsearch.javaсерединаmain()метод. Но запуск таким образом выдаст ошибку. Нам нужно сделать некоторую настройку.

1.конфигурационный каталог

идти сwoohoo.elastic.co/capable/download…Загрузите скомпилированную версию Elasticsearch, обратите внимание, что это должен быть тот же номер версии, после распаковкиconfigСкопируйте каталог в исходный каталогhomeв каталоге Затем откройте «Редактировать конфигурации» и добавьте следующую конфигурацию в параметры виртуальной машины.

-Des.path.conf=D:\elasticsearch-6.3.2\home\config

2. Настройте path.home

Еще варианты ВМ, новые

-Des.path.home=D:\elasticsearch-6.3.2\home

и поместите выпуск ES6.3.2 вmodulesскопировать папку вhomeПод содержанием

3. Включить jmx для log4j

-Dlog4j2.disable.jmx=true

4. область зависимости maven

ОткрытымIDEA Edit Configurations,даватьInclude dependencies with Provided scopeгалочка

5. Настройте политики безопасности

существуетhome/configновый каталогjava.policyФайл, содержимое файла

grant {
    permission java.lang.RuntimePermission "createClassLoader";
};

Затем добавьте параметр java.security.policy в параметры виртуальной машины и укажите этот файл.

-Djava.security.policy=D:\elasticsearch-6.3.2\home\config\java.policy

На этом этапе мы получаем окончательную версию параметров параметров виртуальной машины, как показано ниже:

Нажмите «Выполнить» еще раз, вы увидите вывод консоли:
Снова откройте браузер и перейдите по адресу http://localhost:9200/.

Сделанный!