前提
之前在源碼閱讀環境搭建文章中寫過我遇到的一個問題遲遲沒有解決,也一直困擾着我。問題如下,在啓動的時候解決掉其他異常和報錯後,最後剩下這個錯誤一直解決不了:
[2018-08-01T09:44:27,370][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [] fatal error in thread [main], exiting
java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader
at org.elasticsearch.plugins.PluginsService.loadBundle(PluginsService.java:632) ~[main/:?]
at org.elasticsearch.plugins.PluginsService.loadBundles(PluginsService.java:557) ~[main/:?]
at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:162) ~[main/:?]
at org.elasticsearch.node.Node.<init>(Node.java:311) ~[main/:?]
at org.elasticsearch.node.Node.<init>(Node.java:252) ~[main/:?]
at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:213) ~[main/:?]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:213) ~[main/:?]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[main/:?]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[main/:?]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[main/:?]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[main/:?]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[main/:?]
at org.elasticsearch.cli.Command.main(Command.java:90) ~[main/:?]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[main/:?]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[main/:?]
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader
at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) ~[?:?]
at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:499) ~[?:?]
... 15 more
網上的解決辦法也試了很多遍,包括自己也在 GitHub issue 提問了,也沒能解決。然後後面自己分享文章在掘金也發現有人和我有同樣的問題。
下面講講另一種可以讓你繼續看源碼的方法。
遠程 Debug
前提條件是你之前已經把項目導入進 IDEA 了,如果你還沒了解,請看之前的文章,這裏不重複了。
啓動一個實例
在你 git 拉取下的代碼,切換你要閱讀的分支代碼後,執行下面這條命令啓動一個 debug 的實例:
./gradlew run --debug-jvm
啓動等會後,就可以看到啓動好後的端口號爲 8000 了。
配置 IDEA
新建一個遠程的 debug:
配置如下圖:
接下來點擊 OK 就好了。
然後點擊下面的 debug 圖標:
啓動後如下:
這時就可以發現是可以把整個流程全啓動了,也不會報什麼錯誤!
流程全啓動後,你會發現終端的日誌都打印出來了(注意:這時不是打印在你的 IDEA 控制檯)
總結
遇到問題,多思考,多搜索,多想辦法解決!這樣才能夠不斷的提升你解決問題的能力!
關注我
最後
轉載請務必註明文章出處爲:
http://www.54tianzhisheng.cn/2018/08/14/idea-remote-debug-elasticsearch/
相關文章
2、渣渣菜雞的 ElasticSearch 源碼解析 —— 環境搭建
3、渣渣菜雞的 ElasticSearch 源碼解析 —— 啓動流程(上)
4、渣渣菜雞的 ElasticSearch 源碼解析 —— 啓動流程(下)
5、Elasticsearch 系列文章(一):Elasticsearch 默認分詞器和中分分詞器之間的比較及使用方法
6、Elasticsearch 系列文章(二):全文搜索引擎 Elasticsearch 集羣搭建入門教程
7、Elasticsearch 系列文章(三):ElasticSearch 集羣監控
8、Elasticsearch 系列文章(四):ElasticSearch 單個節點監控