[ https://issues.apache.org/jira/browse/IGNITE-7799?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
PandaMonkey updated IGNITE-7799: -------------------------------- Description: Hi, by analyzing ignite-master\modules\aws\pom.xml, I found that there are two versions of *org.apache.httpcomponents:httpclient*. Their introduced path is: # org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->com.amazonaws:aws-java-sdk-core:1.11.75::compile->org.apache.httpcomponents:httpclient:4.5.2::compile # org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->org.apache.httpcomponents:httpclient:4.5.1::compile Of them, httpclient:4.5.2 is the transitive dependency, and httpclient:4.5.1 is the direct dependency. By further analyzing the source code, we found they have different features. Maven provides the version arbitration mechanism-----"nearest wins strategy", and then your project will explicitly use the older version: httpclient:4.5.1. However, Maven doesn't know which version is actual required by your project. If ignite depends on the methods of com.amazonaws:aws-java-sdk-core, at the same time, those invoked methods need the features definded in httpclient:4.5.2. The dependency conflict problem will appear. For the project long-term health, it would be nice to keep the consistency of library version, then the dependency conflict risks can be also elimited. The dependency conflict problem brings high risks of "*NotClassDefFoundError:*" or "*NoSuchMethodError*" issues at runtime. Please notice this problem. *The solution is upgrading httpclient from 4.5.1 to 4.5.2.* ===============projectPath->org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT@D:\ws\snapshot\ignite-master\modules\aws\pom.xml =======conflict:<org.apache.httpcomponents:httpclient:4.5.2::compile><org.apache.httpcomponents:httpclient:4.5.1::compile> size:2 org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->com.amazonaws:aws-java-sdk-core:1.11.75::compile->org.apache.httpcomponents:httpclient:4.5.2::compile org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->org.apache.httpcomponents:httpclient:4.5.1::compile *====Risk for ClassNotFoundException/NotClassDefFoundError:* a) Classes that only exist in org.apache.httpcomponents:httpclient:4.5.1: org.apache.http.client.utils.DateUtils$DateFormatHolder$1 b) Classes that only exist in org.apache.httpcomponents:httpclient:4.5.2: org.apache.http.conn.ssl.DefaultHostnameVerifier$TYPE org.apache.http.impl.client.DefaultClientConnectionReuseStrategy org.apache.http.conn.ssl.DefaultHostnameVerifier$1 *====Risk for NoSuchMethodException/NoSuchMethodError:* Methods that only exist in org.apache.httpcomponents:httpclient:4.5.2: <org.apache.http.impl.cookie.PublicSuffixDomainFilter: java.util.Map createLocalDomainMap()> <org.apache.http.impl.cookie.IgnoreSpec: boolean match(org.apache.http.cookie.Cookie,org.apache.http.cookie.CookieOrigin)> <org.apache.http.impl.client.HttpClientBuilder: org.apache.http.impl.client.HttpClientBuilder setDnsResolver(org.apache.http.conn.DnsResolver)> was: Hi, by analyzing ignite-master\modules\aws\pom.xml, I found that there are two versions of *org.apache.httpcomponents:httpclient*. Their introduced path is: # org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->com.amazonaws:aws-java-sdk-core:1.11.75::compile->org.apache.httpcomponents:httpclient:4.5.2::compile # org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->org.apache.httpcomponents:httpclient:4.5.1::compile Of them, httpclient:4.5.2 is the transitive dependency, and httpclient:4.5.1 is the direct dependency. By further analyzing the source code, we found they have different features. Maven provides the version arbitration mechanism-----"nearest wins strategy", and then your project will explicitly use the older version: httpclient:4.5.1. However, Maven doesn't know which version is actual required by your project. If ignite depends on the methods of com.amazonaws:aws-java-sdk-core, at the same time, those invoked methods need the features definded in httpclient:4.5.2. The dependency conflict problem will appear. The dependency conflict problem brings high risks of "*NotClassDefFoundError:*" or "*NoSuchMethodError*" issues at runtime. Please notice this problem. *The solution is upgrading httpclient from 4.5.1 to 4.5.2.* ===============projectPath->org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT@D:\ws\snapshot\ignite-master\modules\aws\pom.xml =======conflict:<org.apache.httpcomponents:httpclient:4.5.2::compile><org.apache.httpcomponents:httpclient:4.5.1::compile> size:2 org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->com.amazonaws:aws-java-sdk-core:1.11.75::compile->org.apache.httpcomponents:httpclient:4.5.2::compile org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->org.apache.httpcomponents:httpclient:4.5.1::compile *====Risk for ClassNotFoundException/NotClassDefFoundError:* a) Classes that only exist in org.apache.httpcomponents:httpclient:4.5.1: org.apache.http.client.utils.DateUtils$DateFormatHolder$1 b) Classes that only exist in org.apache.httpcomponents:httpclient:4.5.2: org.apache.http.conn.ssl.DefaultHostnameVerifier$TYPE org.apache.http.impl.client.DefaultClientConnectionReuseStrategy org.apache.http.conn.ssl.DefaultHostnameVerifier$1 *====Risk for NoSuchMethodException/NoSuchMethodError:* Methods that only exist in org.apache.httpcomponents:httpclient:4.5.2: <org.apache.http.impl.cookie.PublicSuffixDomainFilter: java.util.Map createLocalDomainMap()> <org.apache.http.impl.cookie.IgnoreSpec: boolean match(org.apache.http.cookie.Cookie,org.apache.http.cookie.CookieOrigin)> <org.apache.http.impl.client.HttpClientBuilder: org.apache.http.impl.client.HttpClientBuilder setDnsResolver(org.apache.http.conn.DnsResolver)> > Dependency Conflict : Conlicting JARs org.apache.httpcomponents:httpclient > -------------------------------------------------------------------------- > > Key: IGNITE-7799 > URL: https://issues.apache.org/jira/browse/IGNITE-7799 > Project: Ignite > Issue Type: Bug > Components: aws > Affects Versions: 2.5 > Reporter: PandaMonkey > Priority: Minor > Fix For: 3.0 > > > Hi, by analyzing ignite-master\modules\aws\pom.xml, I found that there are > two versions of *org.apache.httpcomponents:httpclient*. Their introduced path > is: > # > org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->com.amazonaws:aws-java-sdk-core:1.11.75::compile->org.apache.httpcomponents:httpclient:4.5.2::compile > # > org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->org.apache.httpcomponents:httpclient:4.5.1::compile > Of them, httpclient:4.5.2 is the transitive dependency, and httpclient:4.5.1 > is the direct dependency. By further analyzing the source code, we found they > have different features. > Maven provides the version arbitration mechanism-----"nearest wins strategy", > and then your project will explicitly use the older version: > httpclient:4.5.1. However, Maven doesn't know which version is actual > required by your project. > If ignite depends on the methods of com.amazonaws:aws-java-sdk-core, at the > same time, those invoked methods need the features definded in > httpclient:4.5.2. The dependency conflict problem will appear. For the > project long-term health, it would be nice to keep the consistency of library > version, then the dependency conflict risks can be also elimited. > The dependency conflict problem brings high risks of > "*NotClassDefFoundError:*" or "*NoSuchMethodError*" issues at runtime. Please > notice this problem. *The solution is upgrading httpclient from 4.5.1 to > 4.5.2.* > > ===============projectPath->org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT@D:\ws\snapshot\ignite-master\modules\aws\pom.xml > > =======conflict:<org.apache.httpcomponents:httpclient:4.5.2::compile><org.apache.httpcomponents:httpclient:4.5.1::compile> > size:2 > > org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->com.amazonaws:aws-java-sdk-core:1.11.75::compile->org.apache.httpcomponents:httpclient:4.5.2::compile > > org.apache.ignite:ignite-aws:2.5.0-SNAPSHOT::null->org.apache.httpcomponents:httpclient:4.5.1::compile > *====Risk for ClassNotFoundException/NotClassDefFoundError:* > a) Classes that only exist in org.apache.httpcomponents:httpclient:4.5.1: > org.apache.http.client.utils.DateUtils$DateFormatHolder$1 > b) Classes that only exist in org.apache.httpcomponents:httpclient:4.5.2: > org.apache.http.conn.ssl.DefaultHostnameVerifier$TYPE > org.apache.http.impl.client.DefaultClientConnectionReuseStrategy > org.apache.http.conn.ssl.DefaultHostnameVerifier$1 > *====Risk for NoSuchMethodException/NoSuchMethodError:* > Methods that only exist in org.apache.httpcomponents:httpclient:4.5.2: > <org.apache.http.impl.cookie.PublicSuffixDomainFilter: java.util.Map > createLocalDomainMap()> > <org.apache.http.impl.cookie.IgnoreSpec: boolean > match(org.apache.http.cookie.Cookie,org.apache.http.cookie.CookieOrigin)> > <org.apache.http.impl.client.HttpClientBuilder: > org.apache.http.impl.client.HttpClientBuilder > setDnsResolver(org.apache.http.conn.DnsResolver)> > -- This message was sent by Atlassian JIRA (v7.6.3#76005)