[英]Maven pulling in older version than specified in pom.xml
我有一个现有的项目 X,我正在向其中添加 AWS 开发工具包,但由于某种原因,它尝试使用旧版本的 Apache Commons httpclient
并失败了。
项目 X 在其pom.xml
已经要求httpclient
没有版本,并且 AWS SDK v1.11.52 指定httpclient
v4.5.2 作为依赖项。 由于没有版本,我在 Project X 的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
查看Tomcat中的lib
目录,我看到httpclient
v4.3的jar在那里。 我确认错误中的构造函数在 v4.3 中不存在,但在 v4.5.2 中确实存在。
我确保使用mvn clean
,清除我的类路径文件,并尝试删除~/.m2
,但是当我重建项目时, httpclient
v4.3 仍然被拉进来。我没有使用 IDE,只是 Maven。 我已经检查了该项目以确保在任何地方都没有提到 v4.3,所以我不明白为什么会发生这种情况。
我用mvn depdency:tree -Dverbose
检查了我的依赖信息。 这是相关部分,其他地方没有提到httpclient
:
[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)
为什么我的任何pom.xml
文件中都没有提到一个版本被拉入? 我可以让 maven 更详细地解释version managed
吗? 最重要的是,有没有办法强制我的依赖项的版本号?
更新:问题是旧版本包含在父 pom 中; 我错过了这个并且无法从dependency:tree
输出中弄清楚。 更新父 pom 解决了这个问题。 抱歉误报。
如果没有直接依赖,只有间接依赖,Maven 会选择它找到的第一个,这完全取决于你的完整依赖树的顺序。 您可以通过以下方式强制版本成为您想要的版本:
旁注:如果遇到其他问题,也许您想以同样的方式更新 httpclient 的某些间接依赖项的版本。
如果你想阅读更多,请看看这篇文章。 这里解释了很多信息: How do I tell Maven to use the latest version of a dependency?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.