【发布时间】:2014-10-11 15:59:03
【问题描述】:
我有一个父项目包含十几个子项目,其中一个子项目使用org.apache.httpcomponents:httpclient:jar:4.3.5,它依赖于org.apache.httpcomponents:httpcore:jar:4.3.2。
但是,httpcore 的结果版本被解析为 4.2.1 而不是 4.3.2。
以下是在 Eclipse 中选中调试选项运行 dependency:tree 时的输出提取:
...
[DEBUG] Using mirror nexus (http://192.168.0.111:8081/nexus/content/groups/public) for apache.snapshots (http://repository.apache.org/snapshots).
[DEBUG] testArtifact: artifact=org.apache.httpcomponents:httpclient:jar:4.3.5:compile
[DEBUG] includeArtifact: artifact=org.apache.httpcomponents:httpclient:jar:4.3.5:compile
[DEBUG] startProcessChildren: artifact=org.apache.httpcomponents:httpclient:jar:4.3.5:compile
[DEBUG] manageArtifactVersion: artifact=org.apache.httpcomponents:httpcore:jar:4.3.2:compile, replacement=org.apache.httpcomponents:httpcore:jar:4.2.1
[DEBUG] Using mirror nexus (http://192.168.0.111:8081/nexus/content/groups/public) for apache.snapshots (http://repository.apache.org/snapshots).
...
它只显示replacement=org.apache.httpcomponents:httpcore:jar:4.2.1,但它没有说明更换的原因。父项目的 pom.xml 使用了相当多的依赖项,即使我可以尝试一个一个删除这些依赖项并检查结果,这也会非常耗时。有没有更有效的方法来调试工件替换?
Here 几乎是来自 Eclipse 的 dependency:tree 的完整日志,并且选中了调试选项。
【问题讨论】:
-
你试过
mvn dependency:tree吗? -
是的,上面的输出来自dependency:tree
-
能否请您发布完整的
mvn -X dependency:tree日志。 -
这确实看起来有点奇怪,但至少它说明了你的罪魁祸首:
[DEBUG] org.apache.httpcomponents:httpcore:jar:4.2.1:compile (version managed from 4.3.2 by org.jboss.as:jboss-as-parent:7.2.0.Final) -
表示 jboss 依赖正在改变 httpcore 的版本号,因为它指定了不同的版本。见here。当然,如果您指定直接依赖项而不是传递依赖项,则您始终可以在自己的 POM 中将版本强制为您需要的任何内容。
标签: maven pom.xml artifact transitive-dependency