idea导入Elasticsearch 7.10.2源码和编译运行

原创
2021/03/27 13:29
阅读数 4.4K

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

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部