현상

ES 6.3.1로 Transport Client를 테스트 하는데 아래와 같은 오류가 발생하였다.
여기서 이상한 점은 메이븐 의존성을 elasticsearch, rest-client, transport 모두 6.3.1로 설정했음에도 불구하고 transport-netty4-client를 5.6.10을 로드 시도한다는 것이다.

java.lang.ClassNotFoundException: org.elasticsearch.common.transport.InetSocketTransportAddress

Caused by: java.lang.NoSuchFieldError: Shared
    at org.elasticsearch.http.netty4.Netty4HttpServerTransport.<clinit>(Netty4HttpServerTransport.java:124) ~[transport-netty4-client-5.6.10.jar:5.6.10]

해결

의존성을 안전하게 import하기 위해 아래와 같이 transport-netty4-client 까지 dependency를 설정하여 해결하였다.

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${es.version}</version>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>${es.version}</version>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch.plugin</groupId>
        <artifactId>transport-netty4-client</artifactId>
        <version>${es.version}</version>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>${es.version}</version>
    </dependency>