Java Maven拉入的版本比pom.xml中指定的版本旧

Java Maven拉入的版本比pom.xml中指定的版本旧,java,maven,Java,Maven,我有一个正在添加AWS SDK的现有项目X,但出于某种原因,它试图使用Apache Commons的旧版本httpclient,结果失败了 项目X在其pom.xml中已经需要httpclient,但没有版本,AWS SDK v1.11.52将httpclientv4.5.2指定为依赖项。由于没有版本,我在ProjectX的pom.xml中将版本设置为4.5.2。这可以成功编译,但是当我尝试在Tomcat托管的JSP页面中使用代码时,我得到以下错误: HTTP Status 500 - Handl

我有一个正在添加AWS SDK的现有项目X,但出于某种原因,它试图使用Apache Commons的旧版本
httpclient
,结果失败了

项目X在其
pom.xml
中已经需要
httpclient
,但没有版本,AWS SDK v1.11.52将
httpclient
v4.5.2指定为依赖项。由于没有版本,我在ProjectX的
pom.xml
中将版本设置为4.5.2。这可以成功编译,但是当我尝试在Tomcat托管的JSP页面中使用代码时,我得到以下错误:

HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.http.conn.ssl.SSLConnectionSocketFactory.<init>(Ljavax/net/ssl/SSLContext;Ljavax/net/ssl/HostnameVerifier;)V
为什么我的
pom.xml
文件中没有提到一个版本?我能让maven更详细地解释
版本管理
吗?最重要的是,有没有办法强制输入依赖项的版本号?



更新:问题是旧版本包含在父pom中;我错过了这一点,无法从
依赖项:树
输出中找到它。更新父pom解决了该问题。很抱歉出现了误报。

如果没有直接依赖项,但只有间接依赖项,Maven将选择它找到的第一个依赖项,这完全取决于完整依赖项树的顺序。您可以通过以下方式强制版本为所需版本:

  • 在pom中添加直接依赖项
  • 在dependencyManagement部分中添加依赖项(请参见:),以确保(在需要时)Maven将选择正确的依赖项
旁注:如果遇到其他问题,您可能希望以同样的方式更新httpclient的一些间接依赖项的版本


如果你想读更多,请看看这篇文章。这里解释了很多信息:

您不需要从aws java sdk依赖项中排除httpclient吗?我不知道这个选项。我刚试过,可惜没用。你能分享你的pom吗,这对我测试很有用,
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.5.2:compile
[INFO] |  +- org.apache.httpcomponents:httpcore:jar:4.3:compile (version managed from 4.4.4)
[INFO] |  +- commons-logging:commons-logging:jar:1.1.3:compile (version managed from 1.2)
[INFO] |  \- commons-codec:commons-codec:jar:1.9:compile
...
[INFO] |  +- com.amazonaws:aws-java-sdk-core:jar:1.11.52:compile
[INFO] |  |  +- (commons-logging:commons-logging:jar:1.1.3:compile - version managed from 1.2; omitted for duplicate)
[INFO] |  |  +- (org.apache.httpcomponents:httpclient:jar:4.3:compile - version managed from 4.5.2; omitted for conflict with 4.5.2)