ES集羣安裝X-pack之後java client連接報錯:
Settings settings = Settings.builder()
.put("cluster.name", Config.clusterName)
.put("client.transport.sniff", true)
.put("xpack.security.transport.ssl.enabled", false)
.put("xpack.security.user", "elastic:zhoushaowei520.")
.build();//指定集羣名稱
// XPack
try {
client = new PreBuiltXPackTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName(Config.nodeHost), Config.nodePort));
List<DiscoveryNode> connectedNodes = client.connectedNodes();
for(DiscoveryNode node : connectedNodes)
{
System.out.println(node.getHostAddress());
LOG.info("sniff host :" + node.getHostAddress());
}
} catch (UnknownHostException e) {
e.printStackTrace();
LOG.error(" Host Is Unknown ");
}
報錯信息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/elasticsearch/xpack/core/XPackClientPlugin
at org.elasticsearch.xpack.client.PreBuiltXPackTransportClient.<init>(PreBuiltXPackTransportClient.java:59)
at org.elasticsearch.xpack.client.PreBuiltXPackTransportClient.<init>(PreBuiltXPackTransportClient.java:54)
at org.elasticsearch.xpack.client.PreBuiltXPackTransportClient.<init>(PreBuiltXPackTransportClient.java:50)
at com.jiadun.ReadDataToEs.utils.ElasticSearchOperator.<clinit>(ElasticSearchOperator.java:58)
at com.jiadun.ReadDataToEs.handler.ReadCsvFileToEs.main(ReadCsvFileToEs.java:61)
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.xpack.core.XPackClientPlugin
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 5 more
在6.2和更早的版本中,x- package -transport POM依賴於x- package -api,它引入了第三方依賴關係,例如UnboundId LDAP SDK和Bouncy Castle(用於讀取TLS鍵)
(縮寫)依賴關係樹是:
+- org.elasticsearch.client:x-pack-transport:jar:6.2.4:compile
| +- org.elasticsearch.plugin:x-pack-api:jar:6.2.4:compile
| | +- com.unboundid:unboundid-ldapsdk:jar:3.2.0:compile
| | +- org.bouncycastle:bcprov-jdk15on:jar:1.58:compile
| | +- org.bouncycastle:bcpkix-jdk15on:jar:1.58:compile
由於6.3,x- package -api POM不再存在,x- package -transport只依賴於x- package -core,不包含任何第三方依賴。
從grepping可以看出,我們生成的POM文件中沒有一個包含ldapsdk的依賴項(我假設也不包含bouncy castle)。
這意味着文檔中發佈的依賴項是不夠的。
官網給的依賴pom如下:
<dependencies>
<!-- add the x-pack jar as a dependency -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>x-pack-transport</artifactId>
<version>{version}</version>
</dependency>
...
</dependencies>
單獨依賴這個jar包是不行的,這是6.2版本以及之前的一個bug
解決辦法github上有詳細解答,在此只列出我修改之後的pom文件,僅做參考,x-pack-core.jar依賴之後會增加很多無用的包,我沒有進一步去精簡,網上有編譯好的x-pack-api.jar包。
下面是無問題後的pom
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>x-pack-transport</artifactId>
<version>6.2.3</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>x-pack-core</artifactId>
<version>6.2.3</version>
</dependency>
<dependency>
<groupId>com.unboundid</groupId>
<artifactId>unboundid-ldapsdk</artifactId>
<version>3.2.0</version>
</dependency>
參考地址:
https://github.com/elastic/elasticsearch/issues/31946
相同問題:https://discuss.elastic.co/t/error-while-creating-elastic-search-x-pack-transport-client/143839