一、下載es源碼,下載后先不著急導入idea
代碼網址:https://github.com/elastic/elasticsearch
git路徑:https://github.com/elastic/elasticsearch.git
執行git checkout -b 7.10 origin/7.10,切換到7.10分支
源碼路徑根路徑記作$es_code_root,方便下文使用
二、配置jdk和gradle
2.1、安裝jdk
從$es_code_root/CONTRIBUTING.md中查找jdk版本,具體為下面一段話:
JDK 14 is required to build Elasticsearch. You must have a JDK 14 installation
with the environment variable`JAVA_HOME` referencing the path to Java home for
your JDK 14 installation. By default, ...
jdk版本下載路徑,可以使用清華的鏡像:https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/,下載相應的版本安裝后,配置JAVA_HOME為安裝路徑,配置完畢,運行java -version查看是否安裝成功。
如果清華的鏡像上沒有jdk14,可以到https://jdk.java.net/archive/上下載。
2.2、安裝gradle
從$es_code_root/gradle/wrapper/gradle-wrapper.properties中查找gradle版本,具體內容如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionSha256Sum=11657af6356b7587bfb37287b5992e94a9686d5c8a0a1b60b87b9928a2decde5
可以使用sdkman安裝gradle,命令為sdk install gradle 6.6.1,安裝完畢,使用gradle -version查看是否安裝成功。
2.3、gradle配置阿里云倉庫
進入gradle的安裝目錄后,在init.d目錄下創建文件init.gradle,并將以下配置信息寫入init.gradle后保存。
allprojects{
? ? repositories {
? ? ? ? def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/'
? ? ? ? def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/'
? ? ? ? all { ArtifactRepository repo ->
? ? ? ? ? ? if(repo instanceof MavenArtifactRepository){
? ? ? ? ? ? ? ? def url = repo.url.toString()
? ? ? ? ? ? ? ? if (url.startsWith('https://repo1.maven.org/maven2/')) {
? ? ? ? ? ? ? ? ? ? project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
? ? ? ? ? ? ? ? ? ? remove repo
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (url.startsWith('https://jcenter.bintray.com/')) {
? ? ? ? ? ? ? ? ? ? project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
? ? ? ? ? ? ? ? ? ? remove repo
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if (url.startsWith('https://plugins.gradle.org/m2/')) {
? ? ? ? ? ? ? ? ? ? project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL."
? ? ? ? ? ? ? ? ? ? remove repo
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? maven { url ALIYUN_REPOSITORY_URL }
? ? ? ? maven { url ALIYUN_GRADLE_PLUGIN_URL }
? ? }
}
三、編譯es
進入es源碼根目錄$es_code_root,./gradlew localDistro,顯示如下信息說明編譯成功。
Elasticsearch distribution installed to $es_code_root/build/distribution/local.
BUILD SUCCESSFUL in 1m 23s
四、部署編譯好的es
將編譯好的es版本$es_code_root/build/distribution/local/elasticsearch-7.10.3-SNAPSHOT拷貝到自己的服務發布路徑,并重命名為elasticsearch-7.10.3,比如:/Users/***/Applications/elasticsearch-7.10.3,將es版本路徑記作$es_app_root,方便下文使用。
進入$es_app_root,使用./bin/elasticsearch運行es,啟動后,在瀏覽器輸入http://localhost:9200/,顯示如下信息證明啟動成功:
五、導入es源碼到idea
5.1、導入源碼并配置jdk和gradle
打開idea,點擊File/Open,選擇$es_code_root/build.gradle,選擇open as project,需要等待幾分鐘,導入完成后,點擊File/Product Structure...配置jdk,并點擊IntelliJ IDEA/Preferences...,搜索gradle,配置gradle路徑,Gradle JVM選擇相應的jdk版本。
5.2、運行es源碼
idea中點擊$es_code_root/server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java,找到main函數,右鍵點擊Run 'Elasticsearch main()',會運行錯誤,然后點擊Run/Edit Configurations...,在VM options中填入以下配置,切記將$es_app_root修改為自己在第四步中es服務的根路徑:
-Des.path.conf=$es_app_root/config
-Des.path.home=$es_app_root
-Dlog4j2.disable.jmx=true
-Djava.security.policy=$es_app_root/config/java.policy
然后在$es_app_root/config目錄下創建文件java.policy,并寫入以下配置:
grant {
? ? permission java.lang.RuntimePermission "createClassLoader";
? ? permission java.lang.RuntimePermission "setContextClassLoader";
};
然后,打開$es_app_root/config/elasticsearch.yml,去掉#node.name: node-1的“#”。
然后,運行Elasticsearch即可,待啟動后,在瀏覽器輸入http://localhost:9200/,顯示類似第四步驟中的信息則證明啟動成功:
如果出現異常信息“java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader”,則重新打開Run Configuration,勾選?include dependency with provided scope后,重新運行即可。如果還是報該異常,則可嘗試修改server模塊下的build.gradle中的compileOnly project(':libs:plugin-classloader')為compile project(':libs:plugin-classloader') 。
六、參考文檔
1、idea導入Elasticsearch 7.10.2源碼和編譯運行,https://copyfuture.com/blogs-details/20210327133933335M
2、在Windows環境IDEA下編譯運行Elasticsearch 7.14.1,https://blog.csdn.net/weixin_43820556/article/details/120165948
3、IDEA 編譯 ElasticSearch 7.8.1,https://blog.csdn.net/ShelleyLittlehero/article/details/107642951
4、ElasticSearch-7.8.0 源碼編譯調試 (詳細),https://zhuanlan.zhihu.com/p/188725714
5、idea源碼調試的問題,https://elasticsearch.cn/question/8243