IDEA 编译 ElasticSearch 7.8.1

IDEA 编译 ElasticSearch 7.8

环境准备

  • ElasticSearch 7.8.1
  • jdk14
  • gradle-6.5
  • elasticsearch-7.8.1-windows-x86_64 (与源码版本一致)
  • IDEA 2019.3

JDK14

  1. 下载地址:https://www.oracle.com/java/technologies/javase-jdk14-downloads.html

  2. 配置环境变量

可能存在的问题:
从jdk 8 切换到 jdk 14时,环境变量配置完成之后,cmd 输入 java -version 显示仍然是1.8的版本

删除 C:\ProgramData\Oracle\Java\javapath下的jar即可。

gradle

  1. 下载 gradle-6.5-all.zip

  2. 配置环境变量

  3. 修改C:\Users\Admin.gradle\init.gradle

allprojects{
    repositories {
        def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
        all {
            ArtifactRepository repo ->
    if (repo instanceof MavenArtifactRepository) {
                def url = repo.url.toString()
                if (url.startsWith('https://repo.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
                    remove repo
                }
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}

下载es源码

git clone:

git clone https://github.com/elastic/elasticsearch.git

切换版本

git checkout 7.8

可能存在的问题:
如果发现git 到最后报错了,可能是由于文件过大引起的,可以按照报错去搜索解决办法。

安装es

  1. 下载地址 :https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7.8.1

  2. 解压即可

编译

7.8版本的es导入idea十分简单,不需要在执行类似 gredlew idea 这样的编译操作 ,直接 使用idea import 即可,具体可以查看 源码文件 elasticsearch\CONTRIBUTING.md中关于idea导入部分的描述。

运行

1.启动类 位于 :elasticsearch\server\src\main\java\org\elasticsearch\bootstrap\Elasticsearch.java,运行会报错

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

在idea的run configuration,vm options中加入

-Des.path.conf=D:\ProgramFiles\ElasticSearch\elasticsearch-7.8.1-windows-x86_64\elasticsearch-7.8.1\config

2.运行再次报错

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

在idea的run configuration,vm options中加入

-Des.path.home=D:\ProgramFiles\ElasticSearch\elasticsearch-7.8.1-windows-x86_64\elasticsearch-7.8.1

3.再次运行报错 :

Exception in thread "main" java.lang.NullPointerException
	at org.elasticsearch.node.InternalSettingsPreparer.checkSettingsForTerminalDeprecation(InternalSettingsPreparer.java:119)
	at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:91)
	at org.elasticsearch.bootstrap.Bootstrap.createEnvironment(Bootstrap.java:311)
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:350)
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170)
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161)
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127)
	at org.elasticsearch.cli.Command.main(Command.java:90)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)

修改 D:\ProgramFiles\ElasticSearch\elasticsearch-7.8.1-windows-x86_64\elasticsearch-7.8.1\config\elasticsearch.yml 配置中的node.name

随便起个名称应该都可以

node.name: node-1

4.再次运行 ,报错:

2020-07-28 18:21:22,738 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
	at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
	at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:444)
	at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.checkMBeanTrustPermission(DefaultMBeanServerInterceptor.java:1805)
	at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:318)
	at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
	at org.apache.logging.log4j.core.jmx.Server.register(Server.java:393)
	at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:168)
	at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:141)
	at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:558)
	at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:263)
	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:207)
	at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:220)
	at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:197)
	at org.elasticsearch.common.logging.LogConfigurator.configureStatusLogger(LogConfigurator.java:259)
	at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:168)
	at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:129)
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:354)
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170)
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161)
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127)
	at org.elasticsearch.cli.Command.main(Command.java:90)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)

vm options中加入

-Dlog4j2.disable.jmx=true

5.再次运行报错:

uncaught exception in thread [main]
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createClassLoader")
	at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
	at java.base/java.security.AccessController.checkPermission(AccessController.java:1036)
	at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:408)
	at java.base/java.lang.SecurityManager.checkCreateClassLoader(SecurityManager.java:470)
	at java.base/java.lang.ClassLoader.checkCreateClassLoader(ClassLoader.java:370)
	at java.base/java.lang.ClassLoader.checkCreateClassLoader(ClassLoader.java:360)
	at java.base/java.lang.ClassLoader.<init>(ClassLoader.java:457)
	at org.elasticsearch.plugins.ExtendedPluginsClassLoader.<init>(ExtendedPluginsClassLoader.java:36)
	at org.elasticsearch.plugins.ExtendedPluginsClassLoader.lambda$create$0(ExtendedPluginsClassLoader.java:57)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
	at org.elasticsearch.plugins.ExtendedPluginsClassLoader.create(ExtendedPluginsClassLoader.java:56)
	at org.elasticsearch.plugins.PluginLoaderIndirection.createLoader(PluginLoaderIndirection.java:31)
	at org.elasticsearch.plugins.PluginsService.loadBundle(PluginsService.java:547)
	at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.java:473)
	at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:164)
	at org.elasticsearch.node.Node.<init>(Node.java:317)
	at org.elasticsearch.node.Node.<init>(Node.java:266)
	at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:227)
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:227)
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:393)
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170)
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161)
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127)
	at org.elasticsearch.cli.Command.main(Command.java:90)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92)

在config目录新建 java.policy,并填入:

grant {
	permission java.lang.RuntimePermission "createClassLoader";
};

在VM options中加入

-Djava.security.policy = D:\ProgramFiles\ElasticSearch\elasticsearch-7.8.1-windows-x86_64\elasticsearch-7.8.1\config\java.policy

VM.options 最后的模样:

-Des.path.conf=D:\ProgramFiles\ElasticSearch\elasticsearch-7.8.1-windows-x86_64\elasticsearch-7.8.1\config
-Des.path.home=D:\ProgramFiles\ElasticSearch\elasticsearch-7.8.1-windows-x86_64\elasticsearch-7.8.1
-Dlog4j2.disable.jmx=true
-Djava.security.policy=D:\ProgramFiles\ElasticSearch\elasticsearch-7.8.1-windows-x86_64\elasticsearch-7.8.1\config\java.policy

再次运行,成功

后记

文章写的比较仓促,权当笔记使用,网上优秀的文章也不少,可以多多学习参考。


版权声明:本文为ShelleyLittlehero原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。