elasticsearch,IDEA,Gradle,源碼編譯,本地調測 ...
ElasicSearch版本:6.0.0:https://github.com/elastic/elasticsearch.git
1:安裝JVM(JVM1.8以上)
2:安裝gradle(3.3以上)
下載:gradle下載地址:http://services.gradle.org/distributions/,下載4.3版本。(本人第一次安裝的是4.4.5,結果到後面執行gradle idea指令的時候,下載不到gradle-logger-4.4.5的包,阿裡的maven或者jcenter都沒有,最新的歸檔的只有4.3)
環境變數:配置GRADLE_HOME到你的gradle根目錄當中,然後把%GRADLE_HOME%/bin加到PATH的環境變數。
檢查:進入cmd控制台,執行gradle -V,會輸出Groovy,JVM等的版本,說明安裝OK
3:下載elasticsearch源碼:
下載ElasticSearch代碼:https://github.com/elastic/elasticsearch,(本人下載的是6.0.0版本):
4:配置軟體包倉庫源地址(如果忍受得了下載的網速,此步驟可選。此步驟因為需要從包倉庫jcenter或者apache的maven庫下載依賴額所有jar,會很漫長,耗費了40分鐘,使用國內的倉庫源,只需要5分鐘即可)
- 在C:\Users\用戶\.gradle下建立init.gradle文件
- 編輯文件內容如下:
allprojects{
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
remove repo
}
}
}
maven {
url REPOSITORY_URL
}
}
}
- 編輯${elasticsearch源碼根目錄}\distribution\build.gradle文件,紅色部分替換為如下。
buildscript {
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
}
dependencies {
classpath 'com.netflix.nebula:gradle-ospackage-plugin:3.4.0'
}
}
5:執行gradle idea
cmd控制台進入elasticsearch源碼根目錄,執行gradle idea。(idea導入源碼前,必須進行此步驟,否則會報錯)
6:ElasticSearch工程導入IDEA
IDEA導入工程,導入的時候需要設置gradle_home,配置為gradle的安裝根目錄。勾選Offline work(否則會連到官網私服下載,會超級慢)和Use local gradle distribution。
7:編譯
在IDEA中view->tool windows->gradle點擊,在gradle project視圖欄目里找到core工程,點擊build編譯,也可以選擇jar,編譯後會在core\build\distributions\下生成elasticsearch的jar包。
8:啟動
Elasticsearch的啟動類:org.elasticsearch.bootstrap.Elasticsearch,右鍵運行。
錯誤一:
Error:Unable to make the module: core_main, related gradle configuration was not
執行
解決方式:刷新gradle工程
問題二:啟動報錯
解決方式:
搞了半天是IDEA和gradle的相容性bug問題:
https://stackoverflow.com/questions/42587487/noclassdeffounderror-after-intellij-idea-upgrade
編譯無問題,運行時找不到依賴的類。
根據所說,此bug在IDEA的新版本解決了,but我的IDEA版本是:2016.3.4
官網下載IDEA 2017.2.5版本:
https://www.jetbrains.com/idea/download/previous.html?fromIDE=
新版本安裝後,此問題解決。
問題三:啟動包es.path.conf未設置。
查看源碼的啟動腳本:
distribution\src\main\resources\bin\下elasticsearch.sh中:
所需的配置文件在源碼的位置:
G:\github-java\elasticsearch-6.0.0\distribution\src\main\resources\config。故而設置兩個JVM環境變數即可:
再次啟動此問題解決。
問題四:access denied ("javax.management.MBeanTrustPermission" "register")
解決方式:設置JVM環境變數如下:-Dlog4j2.disable.jmx=true
問題五:載入不到plugin。
解決方式:參照發行版,發行版目錄下有空的plugins目錄,在G:\github-java\elasticsearch-6.0.0\distribution\src\main\resources下也建立空的plugins目錄。
問題六:Unsupported transport.type
解決方式:將發行版mudules目錄下內容拷貝過來。
問題七:空指針異常:
跟蹤源碼,發現如下原因:ES中對於modules中對於jar包名稱包含elasticsearch-rest-client.jar包的,在編譯的時候,因為本地編譯預設是snapshot的,所以會追加snapshot,這樣的化版本號變為了6.0.0-snapshot,而modules中是從發行版拷貝過來的,結合代碼上追加的codebase,變為了codebase.elasticsearch-rest-client-6.0.0.jar,這樣index版本號就出錯了。
解決方式:修改org.elasticsearch.Build 74行,
// isSnapshot = true; by angie_hawk7
isSnapshot = false;
(也可以設置jvm環境變數:build.snapshot)
再次啟動OK:
10:測試