Maven依赖解析从编译降级到测试; updateScopeCurrentPom

时间:2015-07-24 16:45:48

标签: maven

在两个Maven工件的简单设置中,我遇到了意外的依赖性解析。

  • artifact“mm-lib”取决于外部工件“fluent-hc”
  • artifact“mm-tool”依赖于“mm-lib”和“fluent-hc”,但后者只有范围“test”

我预计“mm-tool”工件依赖于“fluent-hc”,范围为“compile”,因为它取决于“mm-lib”,而后者依赖于“fluent-hc”。

我实际得到的是“mm-tool”取决于“外部”,但仅限于“测试”范围。我没想到。

我已经做了一些研究并最终使用了这个命令:

 mvn dependency:tree -X -Dverbose | grep artifact=

该命令的输出包括以下行:

[DEBUG]   updateScopeCurrentPom:
    artifact=org.apache.httpcomponents:fluent-hc:jar:4.5:test,
    scopeIgnored=compile

这告诉我,这种行为是故意的。但是,这意味着我总是必须检查主项目的所有依赖项是否真的包含在内,这对我来说感觉很奇怪。

为什么这种行为合理,我是否真的必须手动检查所有依赖项?

供参考,以下是实际文件。首先,mm-lib/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>rillig</groupId>
  <artifactId>mm-lib</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>fluent-hc</artifactId>
      <version>4.5</version>
    </dependency>
  </dependencies>
</project>

然后,mm-tool/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>rillig</groupId>
  <artifactId>mm-tool</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>rillig</groupId>
      <artifactId>mm-lib</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>fluent-hc</artifactId>
      <version>4.5</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

1 个答案:

答案 0 :(得分:0)

这是明智的,因为您在fluent-hc中手动指定test的范围应为mmtool。所以Maven当然会给它一个测试范围。如果您希望fluent-hc mmlib依赖关系从fluent-hc继承范围,请不要在mmtool/pom.xml中指定public static int sizeBelow (Node x, int y) { if (t == null) { return 0; }else{ int count = 0; int leftDepth = 0; int rightDepth = 0; if(leftDepth < y){ leftDepth=1+sizeBelow(x.left, y); }else{ count=1+sizeBelow(x.left,y); } if(rightDepth < y){ rightDepth= 1+sizeBelow(x.right,y); }else{ count=1+sizeBelow(x.right,y); } return count; } 依赖关系一点都不让它以你描述的方式工作会使你无法在你自己的POM中覆盖传递依赖的范围。