2013-04-25 166 views
2

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

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

所以情况是:

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

当我运行mvn日食:日食项目A,.classpath文件包含项目B和项目X和Y,但不包括Z.

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

回答

3

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

请参阅this了解maven依赖关系解析的详细说明。

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

如果你知道你是依赖于人造的,但它会在运行时使用,喜欢它是在应用服务器上的Java EE库的情况下,你可以在你pom将其标记为provided

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

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

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

如果Z的依赖关系定义为providedoptional标志设置为true,或者如果它被排除,则这仍然是正常行为。请参阅this,了解Maven处理可选和排除依赖关系的情况。

如果这些选项都不适用,那么我会期望Z与其他依赖关系在那里。要检查的最好的办法是运行mvn dependency:treemvn dependency:list和grep输出为Z.

+0

但这里的问题是项目A的类路径中并不包含项目的所有依赖B. – cmn 2013-04-26 05:07:46

+0

@cmn哎呀,对不起,我坏。请参阅编辑。当您调用'mvn dependency:tree'时,Z是否列出? – kostja 2013-04-26 07:21:31

相关问题