1. 程式人生 > >elasticsearch 源碼本地環境搭建

elasticsearch 源碼本地環境搭建

步驟 netflix 信息 本地 變量 sea not 生效 使用

本篇文章網上有跡可尋,但是每個人在搭建的時候會遇到各種問題,與本地環境有關,下面寫下我自己的搭建過程以及遇到的問題:

1、資源準備
ElasicSearch版本:6.0.0: https://github.com/elastic/elasticsearch
安裝jdk(jdk1.8以上,本人用的是1.8.0_131)
安裝gradle(3.3以上,本人用的是4.3.1) 需要安裝環境變量網上有好多,
下載地址 http://services.gradle.org/distributions/


上面資源都準備好了後 ,開始
1.配置軟件包倉庫源地址 (此步驟因為需要從包倉庫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‘
}
}

2、cmd控制臺進入elasticsearch源碼根目錄,執行gradle idea。(idea導入源碼前,必須進行此步驟,否則會報錯)

3、IDEA導入工程,導入的時候需要設置gradle_home,配置為gradle的安裝根目錄。勾選Offline work(否則會連到官網私服下載,會超級慢)和Use local gradle distribution。

gradle 安裝使用的時候本人也碰到了坑,安裝完代碼執行gradle idea 編譯成功,之後導入idea
但是導入的時候包錯,說jdk版本只能是1.8或以上,當時我這裏用的是jdk1.6,然後我選擇1.8

技術分享圖片

大家可以看到 有好多jdk版本,但是我選多次都不管用,之後才知道這裏面改的時候不好用,只有目前圖片上 use java_home 這個選中了才好用,

如果本地安裝的時候有1.8版本 ,但是 use java_home 這裏面指向的還是低版本,本地windows環境安裝了多個jdk 在cmd命令窗口裏面執行java -version發現版本確實是1.8

開始的時候以為這個如果是1.8 環境變量也就是1.8 ,但是gradle默認就是不指向1.8 查看gradle的配置文件發現取的jdk版本就是本機環境變量配置的版本,

然後查看本機環境變量配置,發現確實是1.6.。。。。。。 之後改了環境變量配置 生效,導入項目成功



4、編譯代碼 在core下 的jar 編譯

技術分享圖片

5、啟動elasticsearch
在core下org.elasticsearch.bootstrap.Elasticsearch 這個類 右鍵運行main方法

報錯 啟動包es.path.conf未設置

技術分享圖片

解決方法 :配置jvm參數

技術分享圖片

這個是自己項目裏面distribution 下的路徑
-Des.path.home=F:\es_code\elasticsearch-6.0\distribution\src\main\resources
-Des.path.conf=F:\es_code\elasticsearch-6.0\distribution\src\main\resources\config

報錯
2017-12-06 19:18:42,999 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")

解決辦法

技術分享圖片

在裏面加上 -Dlog4j2.disable.jmx=true

報錯 Unsupported transport.type

這個報錯 網上說將發行版modules目錄下內容拷貝過來。
對於剛開始接觸elasticsearch 對上邊的說法非常模糊,

自己在處理的時候 跟蹤代碼看了下發現如果用這個jar包的話需要 有個描述文件,

而我在源碼裏面modules 下看到的沒有這個文件,這個時候才意識到網上所說的可能是正在運行中的能直接發布運行的,

之後看了下linux上正在跑著的elasticsearch下的modules文件裏面的內容,果然就應該是這個下面的內容。這裏進行補充

所謂發行版modules 就是現在elasticsearch 在linux上邊能夠部署運行的版本,我們把這裏面的modules裏面的 文件拷貝下來 放在elasticsearch-6.0\distribution\src\main\resources\modules 下
註意 版本要一致


報錯 stirng index out of range -1
跟蹤源碼,發現如下原因:ES中對於modules中對於jar包名稱包含elasticsearch-rest-client.jar包的,在編譯的時候,因為本地編譯默認是snapshot的,所以會追加snapshot,這樣的化版本號變為了6.0.0-snapshot,而modules中是從發行版拷貝過來的,結合代碼上追加的codebase,變為了codebase.elasticsearch-rest-client-6.0.0.jar,這樣index版本號就出錯了。

解決方法 這個
修改 core 下面的 org.elasticsearch.Build.java 74行,
// isSnapshot = true;
isSnapshot = false;
有的時候有可能下載下來的源碼 打包的版本是6.1.0-snapshot 本人就碰到了這種情況下載的是6.0的源碼但是在編譯的 時候發現 6.1.0-snapshot 是這個版本

跟蹤源碼發現 org.elasticsearch.Build.java

技術分享圖片

主要做驗證這塊是Version裏面的版本信息,修改下這個裏面的當前版本就行了。再次啟動OK。

elasticsearch 源碼本地環境搭建