ElasticSearch6.2.3 Java Client 連接安裝Xpack的ES集羣的Bug問題

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章