idea導入Elasticsearch 7.10.2源碼和編譯運行

1、下載軟件
Elasticsearch 7.10.2源碼:v7.10.2
elasticsearch-7.10.2-windows-x86_64.zip 二進制版:7.10.2-windows-x86_64.zip官網elastic
JDK/OpenJDK 14:jvm-and-jdk
gradle-6.6.1:gradle-6.6.1-all.zip

2、idea導入es
es6.8版本後導入idea是非常簡單,可以參看源碼中的CONTRIBUTING.md(https://github.com/elastic/elasticsearch/blob/v7.10.2/CONTRIBUTING.md)
環境配置
(1)安裝JDK14,設置JDK14的JAVA_HOME路徑,並把%JAVA_HOME%\bin路徑加到環境變量PATH中,同時配置idea中jdk14

(2)安裝gradle-6.6.1,並把gradle-6.6.1\bin添加到環境變量PATH中

導入IDEA
按CONTRIBUTING.md說明,執行下邊三個簡單步驟導入
(1)打開idea開發工具,選擇菜單File->Open
(2)在"Open File or Project"對話框中,選擇文件elasticsearch-7.10.2\build.gradle
(3)在隨後的對話框中選擇"Open as Project"
一般直接執行上邊三個步驟導入,會直接在idea編譯和下載相關依賴包,但由於國內網絡問題,需要等待的時間很長。
所以可以在IDEA外部的命令行工具中執行下邊其中一個命令,先把相關依賴包下載到本地。

gradlew localDistro # 爲本地系統構建一個發行版本
gradlew :distribution:archives:linux-tar:assemble    #
gradlew :distribution:archives:darwin-tar:assemble   #
gradlew :distribution:archives:windows-zip:assemble  #
gradlew assemble    # 爲所有支持系統構建發行版本

由於本機配了JDK11,避免環境變量PATH配置JDK14,影響部分軟件運行,可以只在本次編譯源碼中使用jdk14,在elasticsearch-7.10.2\gradlew.bat文件添加代碼

SET JAVA_HOME=C:\Program Files\java\jdk-14.0.2

命令行中輸入gradlew localDistro,直到出現BUILD SUCCESSFUL,如下圖

注意本次編譯只耗時3分鐘,是因爲之前已經編譯過,相關依賴包和文件已經下載到本地

打開idea導入es,導入後效果如下圖

運行錯誤處理

i鼠標右鍵運行Elasticsearch.main(),文件位置elasticsearch-7.10.2\server\src\main\java\org\elasticsearch\bootstrap\Elasticsearch.java,下邊爲運行錯誤處理:
 

ERROR: the system property [es.path.conf] must be set

添加代碼:System.setProperty("es.path.conf","D:\\dev\\es\\elasticsearch-7.10.2\\config");

Exception in thread "main" java.lang.IllegalStateException: path.home is not configured

添加代碼:System.setProperty("es.path.home", "D:\\dev\\es\\elasticsearch-7.10.2");

2021-03-26 14:18:09,189 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")

添加代碼:System.setProperty("log4j2.disable.jmx", "true");
複製elasticsearch-7.10.2-windows-x86_64\config\log4j2.properties到elasticsearch-7.10.2\config\log4j2.properties

java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createClassLoader")

增加代碼:System.setProperty("java.security.policy", "D:\\dev\\es\\elasticsearch-7.10.2\\config\\java.policy");
java.policy文件內容
grant {
    permission java.lang.RuntimePermission "createClassLoader";
    permission java.lang.RuntimePermission "setContextClassLoader";
};

Exception in thread "main" java.lang.NullPointerException
at org.elasticsearch.node.InternalSettingsPreparer.checkSettingsForTerminalDeprecation(InternalSettingsPreparer.java:119)

創建config\elasticsearch.yml,文件內容node.name: node-1

最終Elasticsearch.java修改效果

public static void main(final String[] args) throws Exception {

    // 增加的參數
    System.setProperty("es.path.conf","D:\\dev\\es\\elasticsearch-7.10.2\\config");
    System.setProperty("es.path.home", "D:\\dev\\es\\elasticsearch-7.10.2");
    System.setProperty("log4j2.disable.jmx", "true");
    System.setProperty("java.security.policy", "D:\\dev\\es\\elasticsearch-7.10.2\\config\\java.policy");
    // 增加的參數


    overrideDnsCachePolicyProperties();
    ......
}

如果不修改Elasticsearch.java代碼,也可以通過VM.options增加配置:

-Des.path.conf=D:\dev\es\elasticsearch-7.10.2\config 
-Des.path.home=D:\dev\es\elasticsearch-7.10.2 
-Dlog4j2.disable.jmx=true 
-Djava.security.policy=D:\dev\es\elasticsearch-7.10.2\config\java.policy

 

Caused by: java.nio.file.NoSuchFileException: D:\dev\es\elasticsearch-7.10.2\plugins\analysis-icu\plugin-descriptor.properties
java.nio.file.NoSuchFileException: D:\dev\es\elasticsearch-7.10.2\modules\aggs-matrix-stats\plugin-descriptor.properties

這個主要是運行時,默認會讀取插件或模塊下邊的配置文件,解決辦法,使用發行版本elasticsearch-7.10.2-windows-x86_64的plugins和modules全部替換。


最後成功運行,訪問http://localhost:9200/,效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章