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/,效果