是的,这是预期的行为。项目 B 需要 X、Y 和 Z 才能正常工作,因此这些依赖项(称为传递依赖项)实际上是您项目的一部分。
有关 maven 依赖项解析的详细说明,请参阅this。
您可以调用mvn dependency:tree
或mvn dependency:list
从命令行查看所有依赖项,包括传递的依赖项。
如果你知道你依赖于一个工件,但它会在运行时可用,就像应用服务器上的 Java EE 库一样,你可以将它们标记provided
为pom
:
<dependency>
<groupId>group</groupId>
<artifactId>artifact</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
这些依赖项不会包含在生成的 atrifact 中。
编辑:请原谅我糟糕的阅读能力:) 我在“Z”之前监督了“不”。
如果 Z 的依赖项定义为provided
或optional
标志设置为true
,或者如果它被排除,这可能仍然是正常行为。有关 maven 对可选和排除依赖项的处理,请参阅this。
如果这些选项都不适用,那么我希望 Z 与其他依赖项一起存在。最好的检查方法是运行mvn dependency:tree
或mvn dependency:list
grep Z 的输出。