一、環境
OS:windows 10
IntelliJ IDEA 2018.2.1 (Ultimate Edition)
elasticsearch 源碼:git clone https://github.com/elastic/elasticsearch.git
elasticsearch 編譯版:https://www.elastic.co/downloads/past-releases/elasticsearch-6-0-0
jdk:1.8.0_181
maven:v3.3.9 http://mirrors.shu.edu.cn/apache/maven/maven-3/
gradle:v4.3 https://services.gradle.org/distributions/
(用過gradle4.3.1和最新的gradle4.10編譯,會提示jcenter或者maven倉庫gradle-logging-4.3.1/4.10不存在,看倉庫確實不存在)
二、編譯
1、更換阿里的maven倉庫,加速jar包下載。在用戶根目錄.gradle文件夾(例如我的路徑是C:\Users\zhang\.gradle)下添加文件init.gradle,內容如下(要替換的源可根據需要修改):
allprojects{
repositories {
def my_repo = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2')) {
remove repo
}
}
}
maven {
url my_repo
}
}
}
2、簽出v6.0.0版本的源碼
elasticsearch源碼根目錄運行命令:git checkout -b v6.0 v6.0.0
3、開始編譯:gradle idea
4、導入idea,File->New->Project From Existing Sources->Import As Gradle Project->Done
三、配置
1、新建Application,配置參數:
Main class:org.elasticsearch.bootstrap.Elasticsearch
VM options:
-Des.path.home=D:\GithubProjects\elasticsearch-6.0\core -Des.path.conf=D:\GithubProjects\elasticsearch-6.0\core\config
Working directory:D:\GithubProjects\elasticsearch-6.0
Use classpath of module:core_main
如下圖所示:
2、拷貝需要的模塊
將對應編譯版的config
modules
plugins
目錄拷貝到v6.0源碼的core目錄下,包結構如下圖所示:
四、運行
遇到的錯誤及解決方法:
1、ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
C:\Program Files\Java\jdk1.8.0_181\jre\lib\security\java.policy文件中添加權限permission javax.management.MBeanTrustPermission “register”;(路徑修改成本機環境的jdk路徑)
2、java.lang.StringIndexOutOfBoundsException: String index out of range: -1
org.elasticsearch.bootstrap.Security類 static Policy readPolicy(URL policyFile, Set codebases) 方法 esVersion變量更改:
由 final String esVersion = Version.CURRENT + (Build.CURRENT.isSnapshot() ? “-SNAPSHOT” : “”);
改爲 final String esVersion = Version.CURRENT + (Build.CURRENT.isSnapshot() ? “” : “”);
{
"name" : "h1euXqN",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "T7ELiSqcRdKN7teMqAZHfQ",
"version" : {
"number" : "6.0.0",
"build_hash" : "Unknown",
"build_date" : "Unknown",
"build_snapshot" : true,
"lucene_version" : "7.0.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}