【发布时间】:2013-02-07 07:09:49
【问题描述】:
我有一个项目 X,它依赖于项目 Y 和 Z
项目Y也依赖于项目Z
如果我在pom.xml 中仅指定X 依赖于Y,那么一切仍然有效,因为依赖关系Z 是传递获得的。
那么有什么好的理由在我的pom.xml 中包含依赖项Z 吗?还是不放就可以了?
【问题讨论】:
标签: java maven dependencies dependency-management
我有一个项目 X,它依赖于项目 Y 和 Z
项目Y也依赖于项目Z
如果我在pom.xml 中仅指定X 依赖于Y,那么一切仍然有效,因为依赖关系Z 是传递获得的。
那么有什么好的理由在我的pom.xml 中包含依赖项Z 吗?还是不放就可以了?
【问题讨论】:
标签: java maven dependencies dependency-management
这取决于。如果您的项目实际上使用了来自Y 的类only,那么没有理由明确声明对Z 的依赖,因为它是依赖于Z 的Y。
但我看到一些项目实际上使用了来自Y 和Z 的一些类,但只声明它们依赖于Y。我认为这是一种不好的做法,因为:a)您没有明确声明 all 您的项目依赖项; b) 如果您将 Y 更新到较新的版本,您可能会遇到问题,因为它可能不再依赖于 Z,或者依赖于可能不包含项目所需类的较新版本。
【讨论】:
我同意安德鲁的回答,但我想补充几点:
你可能想看看这个discussion。如果您在 X 的代码中使用 Z,将 Z 作为依赖项显式添加到 X 可能会给您带来一些问题。例如,如果您将 Z 添加为测试依赖项(因为您仅将其用于测试),则 Z 将不会包含在主类路径中,并且您会遇到一些问题,因为 Y 使用的类将不存在。
Maven Enforcer 插件中添加了一个新的强制规则。它允许您更好地控制传递依赖。启用后,所有传递依赖项都将被禁止,您必须明确包含或排除它们。更多详情请见here。
【讨论】: