Spring BootとElasticsearchを連携したアプリケーションを作成中し、Document APIを叩いたところ、
java.lang.ClassNotFoundException: org.elasticsearch.common.xcontent.LoggingDeprecationHandler
が発生したので解決策をメモしておきます。
根本原因
エラーの内容の通り、原因はLoggingDeprecationHandlerというクラスが存在していないためですが、
なぜClassが存在しないかというと、依存性が不足しているからです。
当初mavenの依存性にはElasticsearchの依存性として次のように記述していました。
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.3.2</version>
</dependency>
しかしこのorg.elasticsearch.client
にはLoggingDeprecationHandler
が含まれておらず、
正常動作のためにはorg.elasticsearch
も依存性に含める必要がありました。
解決策
以下のようにpomファイルを修正することで、上記のExceptionが発生せずに動作させることができるようになりました。
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.3.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.3.2</version>
</dependency>