[ https://issues.apache.org/jira/browse/ATLAS-3906?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Bing-ok updated ATLAS-3906: --------------------------- Description: h1. Issue description Hi, there are multiple versions of _*org.apache.curator:curator-client*_ in _*atlas/server-api*_. As shown in the following dependency tree, library _*org.apache.curator:curator-client:2.12.0*_ is transitively introduced by *_org.apache.hadoop:hadoop-auth:3.1.1_*, but has been managed to be version *_4.0.1_*. However, one method defined in shadowed version _*org.apache.curator:curator-client:2.12.0*_ is referenced by client project via *_org.apache.hadoop:hadoop-auth:3.1.1_*, but missing in the actually loaded version _*org.apache.curator:curator-client:4.0.1*_. For instance, the following missing method(defined in _*org.apache.curator:curator-client:2.12.0*_) is actually referenced by _*atlas/server-api*_, which will introduce a runtime error(i.e., "NoSuchMethodError") into _*atlas/server-api*_. _*Missing method: org.codelibs.core.lang.StringUtil: java.lang.String newStringUnsafe(char[])*_ is invoked by _*atlas/server-api*_ via the following path: {noformat} paths------ <org.apache.atlas.RequestContext: org.apache.atlas.model.instance.AtlasEntity getEntity(java.lang.String)> atlas\server-api\target\classes <org.apache.curator.shaded.com.google.common.collect.Maps$AsMapView: java.lang.Object get(java.lang.Object)> Repositories\org\apache\curator\curator-client\4.0.1\curator-client-4.0.1.jar <org.apache.curator.framework.imps.CuratorFrameworkImpl$5: java.lang.Object apply(java.lang.Object)> Repositories\org\apache\curator\curator-framework\4.0.1\curator-framework-4.0.1.jar <org.apache.curator.framework.imps.CuratorFrameworkImpl$5: java.lang.Void apply(org.apache.curator.framework.api.CuratorListener)> Repositories\org\apache\curator\curator-framework\4.0.1\curator-framework-4.0.1.jar <org.apache.curator.utils.ThreadUtils: void checkInterrupted(java.lang.Throwable)>{noformat} h1. Suggested fixing solutions 1. Upgrade dependency *_org.apache.hadoop:hadoop-common_* from _*3.1.1*_ to *_3.3.0_*. Because the newer version *_org.apache.hadoop:hadoop-common:3.3.0_* does not invoke the above missing method, such upgrading can solve the problem. 2. Declare a direct dependency _*org.apache.curator:curator-client:2.12.0*_ in the pom file of _*atlas/server-api*_, to override _*org.apache.curator:curator-client*_'s managed version. 3. Use configuration attribute <dependencyManagement> to unify the version of library _*org.apache.curator:curator-client*_ to be _*2.12.0*_ in _*atlas/server-api*_'s pom file. Please let me know which solution do you prefer? I can submit a PR to fix it. Thank you very much for your attention. Best regards, h1. Dependency tree---- {noformat} [INFO] org.apache.atlas:atlas-server-api:jar:3.0.0-SNAPSHOT [INFO] - org.apache.hadoop:hadoop-common:jar:3.1.1:compile [INFO] +- org.apache.hadoop:hadoop-auth:jar:3.1.1:compile [INFO] | - org.apache.curator:curator-framework:jar:4.0.1:compile (version managed from 2.12.0) [INFO] | - _*(org.apache.curator:curator-client:jar:4.0.1:compile - version managed from 2.12.0; omitted for duplicate)*_ [INFO] - _*org.apache.curator:curator-client:jar:4.0.1:compile*_{noformat} was: Hi, there are multiple versions of _*org.apache.curator:curator-client*_ in _*atlas/server-api*_. As shown in the following dependency tree, according to Maven's “nearest wins” strategy, only _*org.apache.curator:curator-client:4.0.1*_ can be loaded, _*org.apache.curator:curator-client:2.12.0*_ will be shadowed. As _*org.apache.curator:curator-client:2.12.0*_ has not been loaded during the building process, several methods are missing. However, the missing methods: 1. _*org.codelibs.core.lang.StringUtil: java.lang.String newStringUnsafe(char[])*_ {noformat} paths------ <org.apache.atlas.RequestContext: org.apache.atlas.model.instance.AtlasEntity getEntity(java.lang.String)> atlas\server-api\target\classes <org.apache.curator.shaded.com.google.common.collect.Maps$AsMapView: java.lang.Object get(java.lang.Object)> Repositories\org\apache\curator\curator-client\4.0.1\curator-client-4.0.1.jar <org.apache.curator.framework.imps.CuratorFrameworkImpl$5: java.lang.Object apply(java.lang.Object)> Repositories\org\apache\curator\curator-framework\4.0.1\curator-framework-4.0.1.jar <org.apache.curator.framework.imps.CuratorFrameworkImpl$5: java.lang.Void apply(org.apache.curator.framework.api.CuratorListener)> Repositories\org\apache\curator\curator-framework\4.0.1\curator-framework-4.0.1.jar <org.apache.curator.utils.ThreadUtils: void checkInterrupted(java.lang.Throwable)>{noformat} The above missing methods are actually referenced by _*atlas/server-api*_, which will cause “NoSuchMethodErrors” at runtime. Suggested fixing solutions: 1. Upgrade dependency *_org.apache.hadoop:hadoop-common_* from _*3.1.1*_ to *_3.3.0_*. Because one conflicting library version _*org.apache.curator:curator-client:2.12.0*_ is transitively introduced by *_org.apache.hadoop:hadoop-common:3.1.1_*. Upgrading dependency *_org.apache.hadoop:hadoop-common_* from _*3.1.1*_ to *_3.3.0_* can solve this dependency conflict. 2. Directly declare dependency _*org.apache.curator:curator-client:2.12.0*_. 3. Use configuration attribute <dependencyManagement> to unify the version of library _*org.apache.curator:curator-client*_ to be _*2.12.0*_ in _*atlas/server-api*_'s pom file. Please let me know which solution do you prefer? I can submit a PR to fix it. Thank you very much for your attention. Best regards, Dependency tree---- [INFO] org.apache.atlas:atlas-server-api:jar:3.0.0-SNAPSHOT [INFO] \- org.apache.hadoop:hadoop-common:jar:3.1.1:compile [INFO] +- org.apache.hadoop:hadoop-auth:jar:3.1.1:compile [INFO] | \- org.apache.curator:curator-framework:jar:4.0.1:compile (version managed from 2.12.0) [INFO] | \- _*(org.apache.curator:curator-client:jar:4.0.1:compile - version managed from 2.12.0; omitted for duplicate)*_ [INFO] \- _*org.apache.curator:curator-client:jar:4.0.1:compile*_ </details> > “NoSuchMethodErrors” due to multiple versions of > org.apache.curator:curator-client:jar > -------------------------------------------------------------------------------------- > > Key: ATLAS-3906 > URL: https://issues.apache.org/jira/browse/ATLAS-3906 > Project: Atlas > Issue Type: Bug > Affects Versions: 3.0.0 > Reporter: Bing-ok > Priority: Major > > h1. Issue description > Hi, there are multiple versions of _*org.apache.curator:curator-client*_ in > _*atlas/server-api*_. As shown in the following dependency tree, library > _*org.apache.curator:curator-client:2.12.0*_ is transitively introduced by > *_org.apache.hadoop:hadoop-auth:3.1.1_*, but has been managed to be version > *_4.0.1_*. > However, one method defined in shadowed version > _*org.apache.curator:curator-client:2.12.0*_ is referenced by client project > via *_org.apache.hadoop:hadoop-auth:3.1.1_*, but missing in the actually > loaded version _*org.apache.curator:curator-client:4.0.1*_. > For instance, the following missing method(defined in > _*org.apache.curator:curator-client:2.12.0*_) is actually referenced by > _*atlas/server-api*_, which will introduce a runtime error(i.e., > "NoSuchMethodError") into _*atlas/server-api*_. > _*Missing method: org.codelibs.core.lang.StringUtil: java.lang.String > newStringUnsafe(char[])*_ is invoked by _*atlas/server-api*_ via the > following path: > {noformat} > paths------ > <org.apache.atlas.RequestContext: org.apache.atlas.model.instance.AtlasEntity > getEntity(java.lang.String)> atlas\server-api\target\classes > <org.apache.curator.shaded.com.google.common.collect.Maps$AsMapView: > java.lang.Object get(java.lang.Object)> > Repositories\org\apache\curator\curator-client\4.0.1\curator-client-4.0.1.jar > <org.apache.curator.framework.imps.CuratorFrameworkImpl$5: java.lang.Object > apply(java.lang.Object)> > Repositories\org\apache\curator\curator-framework\4.0.1\curator-framework-4.0.1.jar > <org.apache.curator.framework.imps.CuratorFrameworkImpl$5: java.lang.Void > apply(org.apache.curator.framework.api.CuratorListener)> > Repositories\org\apache\curator\curator-framework\4.0.1\curator-framework-4.0.1.jar > <org.apache.curator.utils.ThreadUtils: void > checkInterrupted(java.lang.Throwable)>{noformat} > h1. Suggested fixing solutions > 1. Upgrade dependency *_org.apache.hadoop:hadoop-common_* from _*3.1.1*_ to > *_3.3.0_*. Because the newer version > *_org.apache.hadoop:hadoop-common:3.3.0_* does not invoke the above missing > method, such upgrading can solve the problem. > 2. Declare a direct dependency _*org.apache.curator:curator-client:2.12.0*_ > in the pom file of _*atlas/server-api*_, to override > _*org.apache.curator:curator-client*_'s managed version. > 3. Use configuration attribute <dependencyManagement> to unify the version of > library _*org.apache.curator:curator-client*_ to be _*2.12.0*_ in > _*atlas/server-api*_'s pom file. > Please let me know which solution do you prefer? I can submit a PR to fix it. > Thank you very much for your attention. > Best regards, > h1. Dependency tree---- > {noformat} > [INFO] org.apache.atlas:atlas-server-api:jar:3.0.0-SNAPSHOT > [INFO] - org.apache.hadoop:hadoop-common:jar:3.1.1:compile > [INFO] +- org.apache.hadoop:hadoop-auth:jar:3.1.1:compile > [INFO] | - org.apache.curator:curator-framework:jar:4.0.1:compile (version > managed from 2.12.0) > [INFO] | - _*(org.apache.curator:curator-client:jar:4.0.1:compile - version > managed from 2.12.0; omitted for duplicate)*_ > [INFO] - _*org.apache.curator:curator-client:jar:4.0.1:compile*_{noformat} -- This message was sent by Atlassian Jira (v8.3.4#803005)