我有以下依赖关系树。
[INFO] +- net.sf.jasperreports:jasperreports:jar:6.5.1:compile
[INFO] | +- org.eclipse.jdt.core.compiler:ecj:jar:4.4.2:compile
[INFO] | +- org.codehaus.castor:castor-xml:jar:1.3.3:compile
[INFO] | | +- org.codehaus.castor:castor-core:jar:1.3.3:compile
[INFO] | | +- commons-lang:commons-lang:jar:2.6:compile
当我在pom文件中将依赖项“ commons-lang”添加为顶级依赖项时,即使没有将其从pom文件中排除,它也会自动删除common-lang的传递性依赖项。
[INFO] +- net.sf.jasperreports:jasperreports:jar:6.5.1:compile
[INFO] | +- org.eclipse.jdt.core.compiler:ecj:jar:4.4.2:compile
[INFO] | +- org.codehaus.castor:castor-xml:jar:1.3.3:compile
[INFO] | | +- org.codehaus.castor:castor-core:jar:1.3.3:compile
[INFO] | | +- javax.inject:javax.inject:jar:1:compile
可以预料的是,当我们从jasperreports中排除它时,它应该排除公共语言。
答案 0 :(得分:0)
在您的项目中声明依赖项时,pom maven将使用该声明代替传递依赖项。
忽略的依赖项未显示在maven依赖项树中,我刚刚了解到,由于maven-dependency-plugin 3.0版已不再支持详细选项-这将显示省略的依赖项。
当我尝试在maven命令行中提供-Dverbose选项时(对于“ mvn依赖项:tree -Dverbose = true”),我看到了这一点:
Verbose not supported since maven-dependency-plugin 3.0
答案 1 :(得分:0)
依赖性中介是您正在谈论的规则。这是行家管理传递依赖项的规则之一。
它将根据pom中最接近的定义将commons-lang放入依赖关系树中。
您可以在这里阅读所有规则:
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
所以要引用它们:
依赖关系中介-确定遇到多个版本作为依赖项时,将选择工件的哪个版本。 Maven选择了“最近的定义”。也就是说,它使用依赖关系树中最接近您的项目的版本。您始终可以通过在项目的POM中明确声明版本来保证版本。
并且从不删除commons-lang的依赖关系,它在传递树中的位置已更改。现在它已成为1级依赖项。
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO] \- net.sf.jasperreports:jasperreports:jar:6.5.1:compile
[INFO] +- org.eclipse.jdt.core.compiler:ecj:jar:4.4.2:compile
[INFO] +- org.codehaus.castor:castor-xml:jar:1.3.3:compile
[INFO] | +- org.codehaus.castor:castor-core:jar:1.3.3:compile
[INFO] | +- javax.inject:javax.inject:jar:1:compile
[INFO] | +- stax:stax:jar:1.2.0:compile
[INFO] | | \- stax:stax-api:jar:1.0.1:compile
[INFO] | \- javax.xml.stream:stax-api:jar:1.0-2:compile
[INFO] +- com.fasterxml.jackson.core:jackson-core:jar:2.1.4:compile