Elasticsearch 7.17.3编译和导入idea运行

Elasticsearch 7.17.3编译和导入idea运行,第1张

文章目录
  • 1、下载源码
  • 2、Gradle编译打包
  • 3、在IDEA运行
    • 3.1、IDEA打开build.gradle
    • 3.2、修改Gradle JVM
    • 3.3、运行

1、下载源码

elasticsearch-7.17.3.zip源码:github elastic下载,elastic官网下载
JDK/OpenJDK 17:可用jvm-and-jdk,本文使用Liberica JDK 17.0.3
gradle-7.4.2-all.zip:gradle官网, gradle-7.4.2-all.zip

JDK17和gradle-7.4.2-all安装配置,本文省略,需要配置好PATH环境变量。

以前写过idea导入Elasticsearch 7.10.2源码和编译运行,不过7.17.3源码目录与7.10.2不同,并增加3个与构建相关的项目,作为复合构建包含在Elasticsearch构建中,相关说明BUILDING.md

build-conventions

用于所有elasticsearch项目的构建约定。

build-tools

包含了为第三方elasticsearch插件作者发布的构建逻辑,提供以下插件:
elasticsearch.esplugin -gradle插件,用于构建elasticsearch插件。  
elasticsearch.testclusters -gradle插件,用于在构建中设置es集群进行测试。  
这个项目是作为elasticsearch版本的一部分发布的,可以通过org.elasticsearch.gradle:build-tools:<versionNumber>访问。 由elastic维护的elasticsearch-hadoop项目也使用这些构建工具。

build-tools-internal

包含所有与elasticsearch项目相关的构建逻辑,这些构建逻辑不打算与其他内部或外部项目共享。

下载elasticsearch-7.17.3.zip,并解压在D:\dev\es\elasticsearch-7.17.3,目录如下

2、Gradle编译打包

Elasticsearch 7.17.3源码的README文件,提供的编译打包命令:

gradlew localDistro # 为本地系统构建一个发行版本
gradlew :distribution:archives:linux-tar:assemble    #
gradlew :distribution:archives:darwin-tar:assemble   #
gradlew :distribution:archives:windows-zip:assemble  #
gradlew assemble    # 为所有支持系统构建发行版本

命令行下输入命令进行编译

gradlew localDistro

然后进入漫长的编译等待,在编译完成后,会继续进入打包环节。
最终发行版本会保存在两个目录:

# 两个目录的内容完全一样
elasticsearch-7.17.3\build\distribution\local\elasticsearch-7.17.3-SNAPSHOT
elasticsearch-7.17.3\distribution\archives\windows-zip\build\install\elasticsearch-7.17.3-SNAPSHOT

elasticsearch-7.17.3\build-tools-internal\build.gradle第178行,里面限制了必须大于最小版本(es7.17.3要求jdk16)编译使用的JDK版本,看官网介绍,使用其它版本也是可以的,不过需要注释掉下边的版本检测代码。

if (JavaVersion.current() < JavaVersion.toVersion(minCompilerJava)) {
    throw new GradleException("Java ${minCompilerJava} is required to build Elasticsearch but current Java is version ${JavaVersion.current()}.")
}

发行的版本都会内置JDK,因此编译时会自动下载adoptium openjdk18,在 elasticsearch-7.17.3\build-tools-internal\version.properties文件第4行指定。

bundled_jdk_vendor = adoptium
bundled_jdk = 18+36

openjdk18下载成功后,会保存在下边目录:
C:\Users\用户名\.gradle\caches\modules-2\files-2.1\adoptium_18\windows\18\2e9542c46033e6760b1b214104f2b352e4d659a2\windows-18-x64.zip

直到出现BUILD SUCCESSFUL,编译完成。可以在当前目录下的build和distribution文件夹内找到编译成功后的文件。

3、在IDEA运行 3.1、IDEA打开build.gradle

按CONTRIBUTING.md的importing-the-project-into-intellij-idea说明,

选择File > Open
在对话框中选择elasticsearch-7.17.3\build.gradle文件
在随后的对话框中选择Open as Project  
3.2、修改Gradle JVM

File > Settings…打开设置对话框,修改Gradle JVM为JDK17

如果IDEA没有自动重新加载,可以在窗口中点击重新加载所有Gradle项目。

在加载过程中也会需要下载一些依赖包,需要等待一段时间。

3.3、运行

完成加载后,在IDEA打开elasticsearch-7.17.3\server\src\main\java\org\elasticsearch\bootstrap\Elasticsearch.java文件,右键选择运行,运行会报错
错误1:

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

添加代码:System.setProperty(“es.path.conf”,“D:\dev\es\elasticsearch-7.17.3\build\distribution\local\elasticsearch-7.17.3-SNAPSHOT\config”);

错误2:

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

添加代码:System.setProperty(“es.path.home”, “D:\dev\es\elasticsearch-7.17.3\build\distribution\local\elasticsearch-7.17.3-SNAPSHOT”);

错误3:

java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")

添加代码:System.setProperty(“log4j2.disable.jmx”, “true”);

错误4:

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

创建java.policy文件

grant {
permission javax.management.MBeanServerPermission "createMBeanServer";
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "getClassLoader";
permission java.lang.RuntimePermission "setContextClassLoader";
permission org.elasticsearch.secure_sm.ThreadPermission "modifyArbitraryThread";
permission org.elasticsearch.secure_sm.ThreadPermission "modifyArbitraryThreadGroup";
};

添加代码:System.setProperty(“java.security.policy”, “D:\dev\es\elasticsearch-7.17.3\build\distribution\local\elasticsearch-7.17.3-SNAPSHOT\config\java.policy”);

完整的代码如下:

public static void main(final String[] args) throws Exception {
    / 添加的代码//
    System.setProperty("es.path.conf","D:\dev\es\elasticsearch-7.17.3\build\distribution\local\elasticsearch-7.17.3-SNAPSHOT\config");
    System.setProperty("es.path.home", "D:\dev\es\elasticsearch-7.17.3\build\distribution\local\elasticsearch-7.17.3-SNAPSHOT");
    System.setProperty("log4j2.disable.jmx", "true");
    System.setProperty("java.security.policy", "D:\dev\es\elasticsearch-7.17.3\build\distribution\local\elasticsearch-7.17.3-SNAPSHOT\config\java.policy");
    / 添加的代码//

    overrideDnsCachePolicyProperties();
    ......
}

运行效果

访问http://localhost:9200/

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/756654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-30
下一篇 2022-04-30

发表评论

登录后才能评论

评论列表(0条)

保存