IDEA 编译 ElasticSearch 7.8
环境准备
- ElasticSearch 7.8.1
- jdk14
- gradle-6.5
- elasticsearch-7.8.1-windows-x86_64 (与源码版本一致)
- IDEA 2019.3
JDK14
下载地址:https://www.oracle.com/java/technologies/javase-jdk14-downloads.html
配置环境变量
可能存在的问题:
从jdk 8 切换到 jdk 14时,环境变量配置完成之后,cmd 输入 java -version 显示仍然是1.8的版本
删除 C:\ProgramData\Oracle\Java\javapath下的jar即可。
gradle
下载 gradle-6.5-all.zip
配置环境变量
修改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
下载地址 :https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7.8.1
解压即可
编译
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
再次运行,成功
后记
文章写的比较仓促,权当笔记使用,网上优秀的文章也不少,可以多多学习参考。