pom 应该声明传递依赖吗?

Should a pom declare transitive dependencies?

我的模块 MyLibrary 依赖于工件 ThirdPartyLibrary。

我的模块 MyApplication 依赖于 MyLibrary,但也直接调用 ThirdPartyLibrary 中的代码。

MyApplication 应该明确地将 ThirdPartyLibrary 作为依赖项包含在 pom 中,还是依赖于 MyLibrary 将其作为依赖项包含在内这一事实?

您应该声明您的应用程序直接依赖的每个依赖项,即使(此时)您的另一个直接依赖项向您的应用程序传递相同的依赖项。原因如下:如果您升级 MyApplication 以使用 MyLibrary 的未来版本(您不知道)不再依赖于 ThirdPartyLibrary,您的代码将突然无法编译 – 直到您添加对 ThirdPartyLibraryMyApplication 的显式依赖。这意味着这种依赖应该一直存在。

仅供参考,maven-dependency-plugin has a very helpful dependency:analyze goal 可帮助您确定您的应用程序应声明哪些依赖项;它将查看 MyApplication 的代码,查看对 MyLibrary 的依赖性,并发出警告,指出 MyLibrary 已被使用,但未声明:

[WARNING] Used undeclared dependencies found:
[WARNING]    org.example:ThirdPartyLibrary:jar:1.0:compile