我正在定义一个只有pom文件中有两个依赖项的模块,但生成的.classpath文件(使用mvn eclipse:eclipse)也包含其他依赖项。Maven在pom文件中添加依赖关系
我检查了在这个pom中添加的模块的依赖关系,但并不是所有的都添加了。
所以情况是:
- 项目A依赖于项目B
- 项目B依赖于项目X,Y和 ž
当我运行mvn日食:日食项目A,.classpath文件包含项目B和项目X和Y,但不包括Z.
这不会造成任何问题,但是这是预期的行为吗?
我正在定义一个只有pom文件中有两个依赖项的模块,但生成的.classpath文件(使用mvn eclipse:eclipse)也包含其他依赖项。Maven在pom文件中添加依赖关系
我检查了在这个pom中添加的模块的依赖关系,但并不是所有的都添加了。
所以情况是:
当我运行mvn日食:日食项目A,.classpath文件包含项目B和项目X和Y,但不包括Z.
这不会造成任何问题,但是这是预期的行为吗?
是的,这是预期的行为。项目B需要X,Y和Z才能正常工作,因此这些依赖项(称为传递依赖关系)实际上是您项目的一部分。
请参阅this了解maven依赖关系解析的详细说明。
您可以从命令行调用mvn dependency:tree
或mvn dependency:list
以查看所有依赖项,包括可传递的依赖项。
如果你知道你是依赖于人造的,但它会在运行时使用,喜欢它是在应用服务器上的Java EE库的情况下,你可以在你pom
将其标记为provided
:
<dependency>
<groupId>group</groupId>
<artifactId>artifact</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
这些依赖关系不会包含在您生成的atrifact中。
编辑:请原谅我可怜的阅读技巧:)我已经在'Z'之前监督'不'。
如果Z的依赖关系定义为provided
或optional
标志设置为true
,或者如果它被排除,则这仍然是正常行为。请参阅this,了解Maven处理可选和排除依赖关系的情况。
如果这些选项都不适用,那么我会期望Z与其他依赖关系在那里。要检查的最好的办法是运行mvn dependency:tree
或mvn dependency:list
和grep输出为Z.
但这里的问题是项目A的类路径中并不包含项目的所有依赖B. – cmn 2013-04-26 05:07:46
@cmn哎呀,对不起,我坏。请参阅编辑。当您调用'mvn dependency:tree'时,Z是否列出? – kostja 2013-04-26 07:21:31