在两个Maven工件的简单设置中,我遇到了意外的依赖性解析。
我预计“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>
答案 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中覆盖传递依赖的范围。