ElasticsSearch 源码编译&启动

1、准备

  • idea
  • elasticsearch源码包,可以直接从github上下载。本文使用v7.8.0
  • gradle,需要v6.5+
  • jdk,需要jdk12+
  • 已经部署了es服务去服务器

2、编译

  1. 安装gradle,修改gradle源为国内的ali源(省略)
  2. 配置idea的gradle为我们安装的gradle。
  3. 编译。需要20+min,如果运气好,这步完以后你就能看到编译好以后的代码了。

3、启动

(1)

找到org.elasticsearch.bootstrap.Elasticsearch类,在启动参数中加入

-Des.path.home=D:\elasticsearch\home
-Des.path.conf=D:\elasticsearch\home\config
-Dlog4j2.disable.jmx=true
image.png
(2)

问题:

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

解决:
在java_home中的conf\security\java.policy中添加一行代码:permission java.lang.RuntimePermission "createClassLoader";

(3)

问题:

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

解决:
1、找到server的build.gradle


image.png

2、删掉testRuntimeOnly那行,并且把compileOnly改成compile


image.png
(4)配置

1、到D:\elasticsearch\home\config下(就是上面启动参数配置的es.path.conf),添加elasticsearch.yml以及log4j2.properties文件,不添加启动会失败。具体内容可以去服务器上扣一份下来。
2、去服务器上弄一份module下来,如果用rpm安装默认是在/usr/share/elasticsearch/module,然后解压到D:\elasticsearch\home(就是上面启动参数配置的es.path.home)中。
3、

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]

在elasticsearch.yml中添加xpack.ml.enabled: false

(5)启动

使用org.elasticsearch.bootstrap.Elasticsearch应该就可以启动成功了。

image.png

4、reference

1.https://www.jianshu.com/p/fbb28ffecc5a
2.https://segmentfault.com/a/1190000022217206/
3.https://blog.csdn.net/fh_luchenxi/article/details/106516818

5、后记

1、配置gradle需要小心配置好,记得使用国内的源。
2、启动会遇到的坑基本都写上去了。

你可能感兴趣的:(ElasticsSearch 源码编译&启动)