Maven不在pom文件中添加依赖项

时间:2013-04-25 12:17:03

标签: maven

我在pom文件中定义了一个只有两个依赖项的模块,但生成的.classpath文件(使用mvn eclipse:eclipse)也包含其他依赖项。

我检查了这个pom中添加的模块的依赖关系,但并未添加所有模块的依赖关系。

所以场景是:

  • 项目A取决于项目B
  • 项目B依赖于项目X,Y和 ž

当我在项目A上运行mvn eclipse:eclipse时,.classpath文件包含项目B和项目X和Y,但不包含Z.

这不会导致任何问题,但这是预期的行为吗?

1 个答案:

答案 0 :(得分:3)

是的,这是预期的行为。项目B需要X,Y和Z才能正常工作,因此这些依赖项(称为传递依赖项)实际上是项目的一部分。

有关maven依赖性解析的详细说明,请参阅this

您可以从命令行调用mvn dependency:treemvn dependency:list来查看所有依赖项,包括可传递的依赖项。

如果您知道自己依赖于工件,但它将在运行时可用,就像应用服务器上的Java EE库一样,您可以在{provided中将它们标记为pom 1}}:

<dependency>
  <groupId>group</groupId>
  <artifactId>artifact</artifactId>
  <version>1.0</version>
  <scope>provided</scope>
</dependency>

这些依赖关系不会包含在您生成的atrifact中。

编辑:请原谅我糟糕的阅读技巧:)我已经在'Z'之前监督'不'。

如果Z的依赖关系被定义为providedoptional标志设置为true,或者被排除,则这可能仍然是正常行为。有关maven处理可选和已排除依赖项的信息,请参阅this

如果这些选项都不适用,那么我希望Z与其他依赖项一起存在。检查的最佳方法是运行mvn dependency:treemvn dependency:list并grep输出Z.