繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM