暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

elasticsearch7.10源码环境搭建

码蛋蛋 2021-08-09
3519

编译

下载源码

https://github.com/elastic/elasticsearch.git 从GitHub下载代码

然后切换到对应的分支,我这里使用 7.10 版本

编译

Idea 导入项目后,设置对应的jdk版本,这里使用jdk11编译

如果报sha256sum错误,那么直接点击下面的  "Use*** "即可

编译完成之后

gradle:run --debug-jvm

运行后还是报错:

找不到符号 import org.gradle.jvm.toolchain.JavaInstallation;

然后将本地的gradle也换成了es项目中一样的版本6.6.1,记得将 项目中的.gradle文件夹删掉

使用main函数启动

异常一

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

解决办法


这是需要配置 es.path.conf 参数,我们先在 elasticsearch 源码目录下新建一个

home 目录,然后在 https://www.elastic.co/downloads/elasticsearch

下载一个同版本号的 Elasticsearch7.10 发行版,解压,将config 目录拷贝到home

目录中

然后打开 Edit Configurations,在 VM options 加入如下配置:


-Des.path.conf=/Users/odyssey/elasticsearch/home/config
-Des.path.home=/Users/odyssey/elasticsearch/home
-Dlog4j2.disable.jmx=true

异常二

Caused by: java.lang.ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader

java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader
  at org.elasticsearch.plugins.PluginsService.loadBundle(PluginsService.java:632) ~[main/:?]
  at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.java:557) ~[main/:?]
  at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:162) ~[main/:?]
  at org.elasticsearch.node.Node.<init>(Node.java:311) ~[main/:?]
  at org.elasticsearch.node.Node.<init>(Node.java:252) ~[main/:?]
  at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:213) ~[main/:?]
  at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:213) ~[main/:?]
  at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[main/:?]
  at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[main/:?]
  at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[main/:?]
  at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[main/:?]
  at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[main/:?]
  at org.elasticsearch.cli.Command.main(Command.java:90) ~[main/:?]
  at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[main/:?]
  at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[main/:?]
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader
  at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) ~[?:?]
  at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190) ~[?:?]
  at java.lang.ClassLoader.loadClass(ClassLoader.java:499) ~[?:?]
  ... 15 more

解决办法

勾选idea此选项即可。(注: 各版本该选项位置不同,此版本为2021)

异常三

current version is 7.10 but 7.10.3isrunning

解决办法

修改版本如下: 将7.10.3 改成了 7.10.0

异常四

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:897)
  at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:322)
  at java.base/java.lang.SecurityManager.checkCreateClassLoader(SecurityManager.java:384)
  at java.base/java.lang.ClassLoader.checkCreateClassLoader(ClassLoader.java:369)
  at java.base/java.lang.ClassLoader.checkCreateClassLoader(ClassLoader.java:359)
  at java.base/java.lang.ClassLoader.<init>(ClassLoader.java:456)
  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(Native Method)
  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:636)
  at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.java:479)
  at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:168)
  at org.elasticsearch.node.Node.<init>(Node.java:346)
  at org.elasticsearch.node.Node.<init>(Node.java:289)
  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)
For complete error details, refer to the log at Users/odyssey/elasticsearch/home/logs/elasticsearch.log
Disconnected from the target VM, address: '127.0.0.1:63585', transport: 'socket'

解决办法

在 home/config 目录下新建 java.policy 文件,填入下面内容

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

然后在 VM options 加入 java.security.policy 的设置,指向该文件即可
-Djava.security.policy=/Users/odyssey/elasticsearch/home/config/java.policy

异常五

这个异常是在windows机器上跑的时候产生的,异常信息如下:

Failure running machine learning native code. This could be due to running on an unsupported OS or distribution, missing OS libraries, or a problem with the temp directory. To bypass this problem by running Elasticsearch without machine learning functionality set [xpack.ml.enabled: false]


Caused by: org.elasticsearch.ElasticsearchException: Failure running machine learning native code. This could be due to running on an unsupported OS or distribution, missing OS libraries, or a problem with the temp directory. To bypass this problem by running Elasticsearch without machine learning functionality set [xpack.ml.enabled: false].
  at org.elasticsearch.xpack.ml.MachineLearning.createComponents(MachineLearning.java:645) ~[?:?]
  at org.elasticsearch.node.Node.lambda$new$15(Node.java:553) ~[classes/:?]
  at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271) ~[?:?]
  at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) ~[?:?]
  at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[?:?]
  at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[?:?]
  at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[?:?]
  at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
  at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[?:?]
  at org.elasticsearch.node.Node.<init>(Node.java:557) ~[classes/:?]
  at org.elasticsearch.node.Node.<init>(Node.java:289) ~[classes/:?]
  at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:227) ~[classes/:?]
  at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:227) ~[classes/:?]
  at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:393) ~[classes/:?]
  at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) ~[classes/:?]
  ... 6 more

解决办法

在elasticsearch.yml中增加配置即可解决 ,也就是elasticsearch/home/config/elasticsearch.yml

xpack.ml.enabled: false

最终 vm options配置

-Des.path.conf=/Users/odyssey/elasticsearch/home/config
-Des.path.home=/Users/odyssey/elasticsearch/home
-Dlog4j2.disable.jmx=true
-Djava.security.policy=/Users/odyssey/elasticsearch/home/config/java.policy

参考文章

https://www.cnblogs.com/candlia/p/11920056.html


文章转载自码蛋蛋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论