如果想阅读Elasticsearch源码,定制功能,不可避免的要编译Elasticsearch。本文图文并茂,介绍如何使用Intellij Idea编译Elasticsearch源码包。
一、软件环境
Intellij Idea:2017.1版本
Elasticsearch源码版本:2.3.3
JDK:jdk1.7.0_80.jdk
OS:OS X Yosemite 10.10.3
二、下载Elasticsearch源码
Elasticsearch的发行版本,也就是用户使用的版本要到Elastic官网下载,源码包要到github上下载,下载地址:https://github.com/elastic/elasticsearch/releases,如下图所示下载Elasticsearch 2.3.3版本,选择tar.gz格式。
解压缩到本地,我这里的路径为/Users/bee/Documents/es/elasticsearch-2.3.3
,解压后elasticsearch-2.3.3目录下的core文件夹就是源码包的位置,如下图所示。
三、加入config目录
把运行版本的elasticsearch-2.3.3目录下的config文件(elasticsearch.yml所在位置)夹拷贝到/Users/bee/Documents/es/elasticsearch-2.3.3/core
目录下,config目录下的文件如下。
elasticsearch-2.3.3
--config
--elasticsearch.yml
--logging.yml
--scripts
四、Intellij Idea导入源码
打开Intellij Idea,选择Import Project,下一步。
选择elasticsearch-2.3.3/core所在路径,下一步。
选择默认的pom,下一步。
选择默认的配置,下一步。
选择JDK版本,如果有多个JDK,可以在这里进行选择。
设置工程名称,下一步。
工程导入完成以后,在src/main/java
目录下找到org.elasticsearch.bootstrap
包下的elasticsearch.java
,这时候单独运行会报错,运行之前配置elasticsearch.java的参数,点击Edit Eonfiguration(菜单路径Run->Edit Eonfiguration)。
配置参数:
VM Options中增加-Des.path.home路径为ES源码包位置。
-Des.path.home=/Users/bee/Documents/es/elasticsearch-2.3.3/core
Program arguments中增加
start
点击OK,运行elasticsearch.java。
如果一切顺利,可以在console中看到以下输出。
至此,Intellij Idea编译Elasticsearch源码成功!
五、关于JDK版本
第一次编译的时候使用的是jdk1.8.0_112.jdk
,出现以下错误,改成最新的jdk1.8.0_121.jdk
仍然不行,后来发现是mac版JDK的一个bug,换成jdk1.7.0_80.jdk
一切OK。
objc[413]: Class JavaLaunchHelper is implemented in both
/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/bin/java and
/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/libinstrument.dylib.
One of the two will be used. Which one is undefined.
参考资料
http://stackoverflow.com/questions/23590613/java-8-class-javalaunchhelper-is-implemented-in-both