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