Open
Description
比如项目中如果引用了某个库且该库依赖于 org.apache.httpcomponents.httpcore-4.4.11,但是当前的hitsdb-client 依赖于 4.4.6
这种情况下 在创建客户端时就会报错:
Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.nio.codecs.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:53)
at org.apache.http.impl.nio.codecs.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:57)
at org.apache.http.impl.nio.codecs.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:47)
at org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionFactory.<init>(ManagedNHttpClientConnectionFactory.java:75)
at org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionFactory.<init>(ManagedNHttpClientConnectionFactory.java:83)
at org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionFactory.<clinit>(ManagedNHttpClientConnectionFactory.java:64)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingNHttpClientConnectionManager.java:581)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.<init>(PoolingNHttpClientConnectionManager.java:165)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.<init>(PoolingNHttpClientConnectionManager.java:149)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.<init>(PoolingNHttpClientConnectionManager.java:121)
at com.aliyun.hitsdb.client.http.HttpClientFactory.createHttpClient(HttpClientFactory.java:135)
at com.aliyun.hitsdb.client.TSDBClient.<init>(TSDBClient.java:70)
at com.aliyun.hitsdb.client.TSDBClientFactory.connect(TSDBClientFactory.java:14)
虽然可以通过 exclusion 来解决这样的问题,但是用户体验是比较差的。最好是能在这种情况下,不要报错。这个 Issue 就希望讨论下是不是可以将 TSDB SDK 的依赖进行 shaded ,以便于跟用户其它部分的依赖相隔离。