[ https://issues.apache.org/jira/browse/KYLIN-4656?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17163407#comment-17163407 ]
Gabor Arki commented on KYLIN-4656: ----------------------------------- [~zhangyaqian] because you are excluding it from the dependencies of the released pom, but not from the shading itself. * Instead of providing an exclude list and shade everything else: {noformat} <artifactSet> <excludes> <exclude>org.slf4j:jcl-over-slf4j:*</exclude> </excludes> </artifactSet>{noformat} You should define an include list and shade only that you actually intend to shade: {noformat} <artifactSet> <includes> <include>org.apache.kylin:kylin-shaded-guava</include> <include>org.apache.calcite.avatica:avatica-core</include> <include>org.apache.calcite.avatica:avatica-metrics</include> <include>com.fasterxml.jackson.core:jackson-annotations</include> <include>com.fasterxml.jackson.core:jackson-core</include> <include>com.fasterxml.jackson.core:jackson-databind</include> <include>com.google.protobuf:protobuf-java</include> <include>org.apache.httpcomponents:httpclient</include> <include>org.apache.httpcomponents:httpcore</include> <include>commons-codec:commons-codec</include> <include>commons-logging:commons-logging</include> </includes> </artifactSet>{noformat} This set it the one that seems to be included in 3.0.2, not sure if everything is actually needed or not. * Also, the relocation in the kylin-shaded-guava module is not complete: {noformat} <pattern>com.google.common</pattern> <shadedPattern>${shadeBase}.com.google.common</shadedPattern>{noformat} It relocated only the {{com.google.common}} package of guava, but keeps {{com.google.thirdparty}} as is allowing again some classpath conflicts. Should be: {noformat} <pattern>com.google</pattern> <shadedPattern>${shadeBase}.com.google</shadedPattern>{noformat} * These workarounds seem to fix the issue locally, but defining dependencies in the [parent pom|https://github.com/apache/kylin/blob/master/pom.xml#L1095] is still a bad practice because these are transitively also defined as dependencies for anyone who is using your public libraries like kylin-jdbc. > Guava classpath conflict caused by kylin-jdbc 3.1.0 jar > ------------------------------------------------------- > > Key: KYLIN-4656 > URL: https://issues.apache.org/jira/browse/KYLIN-4656 > Project: Kylin > Issue Type: Bug > Components: Driver - JDBC > Affects Versions: v3.1.0 > Reporter: Gabor Arki > Priority: Critical > Attachments: image-2020-07-23-07-44-40-675.png > > > The newly released kylin-jdbc 3.1.0 jar contains a shaded, non-repackaged > version of the Guava library. This is causing class duplication with the > original guava jar if it is also on the classpath which results in > non-deterministic, runtime errors depending on which version of a certain > guava class has been picked up by the class-loader from the 2 versions. Based > on the runtime errors of the missing classes and methods, it seems to be a > very old version, probably <=14. > > Either implement a proper shading with package relocation or rely on > transitive dependency, but do not shade non-repackaged versions of libraries. -- This message was sent by Atlassian Jira (v8.3.4#803005)