Эта статья является первой в серии документов по анализу исходного кода elasticsearch. В этой статье кратко представлена конструкция исходного кода elasticsearch в локальной среде компиляции.
Используемые инструменты: IntelliJ Idea, JDK1.8, gradle3.5, релизная версия elasticsearch-6.0.0-rc2.
скачать готов
Во-первых, скачайте основную версию elasticsearch с gihut.После импорта IDE я вижу, что многие зависимости отсутствуют, потому что проект не был скомпилирован с помощью gradle.
Сначала проверьте текущую версию исходного кода elasticsearch. Вы можете увидеть ее в классе org.elasticsearch.Version#CURRENT. Вы можете видеть, что текущая основная версия — это версия 7.0.0-alpha1, но официальный выпуск этого веб-сайта версии его нет, и страница документации этой версии тоже Только что установилась, поэтому переключите код в ide на 6.0.0-rc2, потому что эта версия является версией, которую можно скачать на относительно новый релиз на официальном сайте , как показано ниже:
После завершения перехода перейдите на официальный сайт, чтобы загрузить релизную версию 6.0.0-rc2, которая будет использоваться позже. Как показано ниже:
Поскольку инструмент компиляции по умолчанию в elasticsearch изменился с Maven на Gradle после версии 5.X. Среду Gradle необходимо настроить локально, и при необходимости можно переключить внутренний источник. Эта машина использует Gradle3.5 и JDK1.8 для компиляции elasticsearch. Рекомендуется, чтобы версия Gradle не была слишком высокой. Как показано ниже:
начать компиляцию
Если вы сейчас запустите gradle idea в IDE (если IDE — это eclipse, команда будет gradle idea), вам будет предложено «идея gradle должна быть выполнена перед импортом», как показано ниже:
cmd переключитесь в основной каталог и запустите команду gradle idea (поскольку используемая IDE — это idea, если IDE — Eclipse, используйте команду Gradle eclipse). Как показано ниже:
Затем переключитесь в корневую директорию elasticsearch и запустите команду gradle idea.Если компиляция прошла успешно, она будет отображаться, как показано на рисунке:
После успешной компиляции запустите IDE, а идея будет долго настраивать градл.После завершения настройки просмотрите проект, как показано ниже, и вы можете в основном увидеть обзор проекта:
путь запуска
Стартовый файл elasticsearch — elasticsearch. В файле упоминается path.conf, ищите в этом поле, чтобы найти в дистрибутиве rpm/src/main/packaging/init.d/, именно здесь инициализируется elasticsearch, а также здесь задаются некоторые параметры, такие как path.conf.
По сценарию запуска находим запись основного метода org.elasticsearch.bootstrap.Elasticsearch, который наследуется от класса EnvironmentAwareCommand, который в основном задает некоторые параметры и запускает программу. EnvironmentAwareCommand наследуется от класса Command, и отношение наследования выглядит следующим образом:
Основной метод в Elasticsearch фактически вызывает основной метод Command.После создания перехватчика выключения этот метод настраивает ведение журнала и, наконец, выполняет метод mainWithoutErrorHandling, который, наконец, вызывает метод выполнения EnvironmentAwareCommand. Как показано ниже:
Класс построения среды EnvironmentAwareCommand конструирует различные параметры elasticsearch через метод execute, такие как path.data, path.home, path.logs, а затем конструирует текущую конфигурацию через метод createEnv этого класса, как показано на рисунке:
В это время после запуска основного метода будет выдано сообщение об ошибке:
Глядя на исходный код, вы можете видеть, что es.path.conf передается в качестве параметра, как показано ниже:
конфигурация параметров
На этом шаге используется только что загруженный пакет распространения elasticsearch, разархивируйте загруженный пакет распространения и в окне конфигурации Run/Debug Configurations настройте параметры параметров виртуальной машины следующим образом:
-Des.path.conf=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Des.path.home=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Dlog4j2.disable.jmx=true
Путь D:\idea\workspace\elasticsearch\distribution\src\main\resources — это путь для загрузки и распаковки дистрибутива.
После установки параметров заданное значение будет передано в качестве параметра в метод createEnv команды EnvironmentAwareCommand.
После настройки трех вышеуказанных параметров локальный запуск elasticsearch прочитает параметры, плагины и модули дистрибутива и успешно запустится.
Проблемы, возникающие в процессе эксплуатации
Могут быть проблемы с политикой безопасности java
доступ запрещен ("javax.management.MBeanTrustPermission" "зарегистрироваться") Решение состоит в том, чтобы создать новый файл политики Java elasticsearch.policy.
Содержание:
grant{
permission javax.management.MBeanTruxtPermission "register";
permission javax.management.MBeanServerPermission "createMBeanServer";
};
Затем добавьте параметр jvm:
-Djava.security.policy=/User/seymour/workspace/elasticsearch.policy
Может быть проблема с версией SNAPSHOT пакета jar в модуле
В методе readPolicy() класса org.elasticsearch.bootstrap.Security код определяет, что в данный момент запущена версия моментального снимка, но elasticsearch-rest-client-6.0.0-rc2.jar в дистрибутиве, который мы скачали и распаковали Это выпускная версия. Измените имя пакета jar на версию моментального снимка (elasticsearch-rest-client-6.0.0-rc2-SNAPSHOT), и он сможет нормально работать, как показано ниже:
запустить успешно
После успешного запуска вы можете протестировать его с помощью адреса 127.0.0.1:9200. После успешного завершения теста вы можете отладить код.