[1]elasticsearch源碼編譯

本文是elasticsearch源碼分析系列文檔的第一篇出爹,本篇簡單介紹了elasticsearch源碼在本機(jī)的編譯環(huán)境搭建

用到的工具有:IntelliJ Idea阶捆,JDK1.8筋粗,gradle3.5,elasticsearch-6.0.0-rc2的發(fā)行版

下載準(zhǔn)備

首先從gihut上download下來elasticsearch的主干版本夭谤,導(dǎo)入IDE后看到缺少很多依賴包搀菩,是因?yàn)檫€沒有使用gradle編譯項(xiàng)目。


導(dǎo)入IDE后看到缺少很多包.png

首先查看elasticsearch源碼的當(dāng)前版本旦签,在類org.elasticsearch.Version#CURRENT中能看到查坪,查看到當(dāng)前master的版本是7.0.0-alpha1版本,而該版本官網(wǎng)發(fā)行版沒有顷霹,該版本的文檔頁也是剛建立咪惠,所以將ide中的代碼切換到6.0.0-rc2,因?yàn)檫@個(gè)版本是能在官網(wǎng)下載到比較新的發(fā)行版的版本,如下圖:


在ide中切換到6.0版本.png

切換完成后淋淀,去官網(wǎng)下載6.0.0-rc2的發(fā)行版本,待會用得到覆醇。如下圖:

官網(wǎng)下載6.0.0-rc2的發(fā)行版.png

因?yàn)閑lasticsearch在5.X版本后默認(rèn)的編譯工具從Maven換到了Gradle朵纷。需要在本機(jī)配置好Gradle環(huán)境,如有必要可以切換國內(nèi)的源永脓。本機(jī)使用Gradle3.5和JDK1.8編譯elasticsearch袍辞。建議Gradle版本不要太高。如下圖:

修改gradle倉庫配置.png

開始編譯

如果現(xiàn)在就在IDE中執(zhí)行g(shù)radle idea(如果IDE是eclipse常摧,那命令就是gradle idea)搅吁,會提示,“必須在導(dǎo)入前執(zhí)行g(shù)radle idea”落午,如下圖:

提示必須在導(dǎo)入idea之前執(zhí)行g(shù)radle idea命令.png

cmd切換到core目錄下谎懦,運(yùn)行g(shù)radle idea命令(因?yàn)橛玫腎DE是idea,如果IDE是Eclipse溃斋,則使用Gradle eclipse命令)界拦。如下圖:

本地編譯elasticsearch成功.png

再切換到elasticsearch的根目錄下運(yùn)行g(shù)radle idea 命令,如果編譯成功的話會顯示如圖:

在elasticsearch根目錄下編譯成功.png

編譯成功后梗劫,啟動IDE享甸,idea會進(jìn)行很長時(shí)間的gradle的配置截碴,等待配置完畢后,查看項(xiàng)目如下圖蛉威,基本能看到項(xiàng)目的概覽:

t-8編譯好后導(dǎo)入IDE結(jié)果.png

啟動路徑

elasticsearch的啟動文件是elasticsearch
文件中提到了path.conf,搜索該字段找到了distribution包中的rpm/src/main/packaging/init.d/,這就是elasticsearch的初始化的地方日丹,path.conf等一些參數(shù)也是在這里被設(shè)置的。

根據(jù)啟動腳本找到main方法的入口org.elasticsearch.bootstrap.Elasticsearch蚯嫌,該方法繼承自EnvironmentAwareCommand類哲虾,這個(gè)類主要是一些參數(shù)指定與程序啟動。
而EnvironmentAwareCommand又繼承自Command類齐帚,繼承關(guān)系如下圖:

啟動類的繼承關(guān)系.png

Elasticsearch中的main方法其實(shí)是調(diào)用了Command的main方法妒牙,這個(gè)方法在創(chuàng)建了了shutdown鉤子后,配置了logging对妄,最后執(zhí)行mainWithoutErrorHandling方法湘今,這個(gè)方法最后會調(diào)用EnvironmentAwareCommand的execute方法。如下圖:

Command類中的main方法.png

EnvironmentAwareCommand環(huán)境構(gòu)造類通過execute方法構(gòu)造了elasticsearch的各種參數(shù)剪菱,如path.data摩瞎,path.home,path.logs孝常,然后通過該類的createEnv方法構(gòu)造運(yùn)行配置旗们,如圖:

EnvironmentAwareCommand類的execute方法.png
EnvironmentAwareCommand類的createEnv方法.png

這時(shí)運(yùn)行main方法后會提示錯(cuò)誤:

執(zhí)行main方法后提示錯(cuò)誤找不到es.path.conf.png

查看源碼可以知道es.path.conf被作為參數(shù)傳遞,如下圖:

t-11配置的Des.path.conf被作為參數(shù)傳遞.png

參數(shù)配置

這一步用到了剛才下載的elasticsearch發(fā)行版本包构灸,把下載的發(fā)行版本包解壓上渴,在Run/Debug Configurations配置窗口中,配置VM options參數(shù)為:

-Des.path.conf=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Des.path.home=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Dlog4j2.disable.jmx=true

路徑D:\idea\workspace\elasticsearch\distribution\src\main\resources是下載解壓好的發(fā)行版路徑喜颁。

設(shè)定參數(shù)后在EnvironmentAwareCommand的createEnv方法中會將設(shè)定值作為參數(shù)傳遞稠氮。


配置啟用發(fā)行版的配置和插件運(yùn)行.png

在配置好了以上三個(gè)參數(shù)后,elasticsearch的本地啟動就會讀取發(fā)行版的參數(shù)半开,插件和模塊隔披,從而成功運(yùn)行。

運(yùn)行中遇到的問題

有可能會遇到j(luò)ava安全策略的問題

access denied ("javax.management.MBeanTrustPermission" "register")
解決方法是新建一個(gè)java策略文件elasticsearch.policy

內(nèi)容是:

grant{
    permission javax.management.MBeanTruxtPermission "register";
    permission javax.management.MBeanServerPermission "createMBeanServer";
};

再添加jvm參數(shù):

-Djava.security.policy=/User/seymour/workspace/elasticsearch.policy
有可能會遇到module中jar包的SNAPSHOT版本問題

在org.elasticsearch.bootstrap.Security類的readPolicy()方法中,代碼探測到目前運(yùn)行的是snapshot版本检激,但是在我們下載解壓的發(fā)行版本中的elasticsearch-rest-client-6.0.0-rc2.jar確是發(fā)行版的,把這個(gè)jar包的名稱改成snapshot版本(elasticsearch-rest-client-6.0.0-rc2-SNAPSHOT)鬓长,就能正常運(yùn)行,如下圖:

jar包版本問題.png
節(jié)點(diǎn)不可寫

org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: failed to obtain node locks, tried [[/usr/local/elasticsearch-5.2.0/data/my-application]] with lock id [0]; maybe these locations are not writable or multiple nodes were started without increasing
則:
刪除/data目錄下的內(nèi)容
rm -rf nodes/

成功運(yùn)行

成功運(yùn)行后渺蒿,可以使用127.0.0.1:9200來測試?yán)擦∈浚瑴y試成功后就能進(jìn)行代碼的調(diào)試。

成功運(yùn)行.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市怠蹂,隨后出現(xiàn)的幾起案子善延,更是在濱河造成了極大的恐慌,老刑警劉巖城侧,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件易遣,死亡現(xiàn)場離奇詭異,居然都是意外死亡嫌佑,警方通過查閱死者的電腦和手機(jī)豆茫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屋摇,“玉大人揩魂,你說我怎么就攤上這事∨谖拢” “怎么了火脉?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長柒啤。 經(jīng)常有香客問我倦挂,道長,這世上最難降的妖魔是什么担巩? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任方援,我火速辦了婚禮,結(jié)果婚禮上涛癌,老公的妹妹穿的比我還像新娘犯戏。我一直安慰自己,他們只是感情好拳话,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布笛丙。 她就那樣靜靜地躺著,像睡著了一般假颇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骨稿,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天笨鸡,我揣著相機(jī)與錄音,去河邊找鬼坦冠。 笑死形耗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辙浑。 我是一名探鬼主播激涤,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼判呕!你這毒婦竟也來了倦踢?” 一聲冷哼從身側(cè)響起送滞,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辱挥,沒想到半個(gè)月后犁嗅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晤碘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年褂微,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片园爷。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宠蚂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出童社,到底是詐尸還是另有隱情求厕,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布叠洗,位于F島的核電站甘改,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏灭抑。R本人自食惡果不足惜十艾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腾节。 院中可真熱鬧忘嫉,春花似錦、人聲如沸案腺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劈榨。三九已至访递,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間同辣,已是汗流浹背拷姿。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旱函,地道東北人响巢。 一個(gè)月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像棒妨,于是被迫代替她去往敵國和親踪古。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,799評論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,773評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)伏穆,斷路器拘泞,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 下面的故事,不是自己寫的蜈出,來自另外一個(gè)公眾號田弥,卻給了自己好多感觸,至少昨天铡原,我沒有睡著偷厦。物質(zhì)橫流的今天,我也不知道...
    老tan子閱讀 199評論 0 1
  • 當(dāng)感覺自己被討厭的時(shí)候燕刻,真想離開這個(gè)世界只泼。 “真脆弱呢÷严矗” “是啊...我就是這么沒用请唱,經(jīng)不起打擊」澹”
    星辰x閱讀 194評論 0 2