Java Maven拉入的版本比pom.xml中指定的版本旧
我有一个正在添加AWS SDK的现有项目X,但出于某种原因,它试图使用Apache Commons的旧版本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
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将选择正确的依赖项
如果你想读更多,请看看这篇文章。这里解释了很多信息:您不需要从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)