pom 应该声明传递依赖吗?
Should a pom declare transitive dependencies?
我的模块 MyLibrary 依赖于工件 ThirdPartyLibrary。
我的模块 MyApplication 依赖于 MyLibrary,但也直接调用 ThirdPartyLibrary 中的代码。
MyApplication 应该明确地将 ThirdPartyLibrary 作为依赖项包含在 pom 中,还是依赖于 MyLibrary 将其作为依赖项包含在内这一事实?
您应该声明您的应用程序直接依赖的每个依赖项,即使(此时)您的另一个直接依赖项向您的应用程序传递相同的依赖项。原因如下:如果您升级 MyApplication
以使用 MyLibrary
的未来版本(您不知道)不再依赖于 ThirdPartyLibrary
,您的代码将突然无法编译 – 直到您添加对 ThirdPartyLibrary
到 MyApplication
的显式依赖。这意味着这种依赖应该一直存在。
仅供参考,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
我的模块 MyLibrary 依赖于工件 ThirdPartyLibrary。
我的模块 MyApplication 依赖于 MyLibrary,但也直接调用 ThirdPartyLibrary 中的代码。
MyApplication 应该明确地将 ThirdPartyLibrary 作为依赖项包含在 pom 中,还是依赖于 MyLibrary 将其作为依赖项包含在内这一事实?
您应该声明您的应用程序直接依赖的每个依赖项,即使(此时)您的另一个直接依赖项向您的应用程序传递相同的依赖项。原因如下:如果您升级 MyApplication
以使用 MyLibrary
的未来版本(您不知道)不再依赖于 ThirdPartyLibrary
,您的代码将突然无法编译 – 直到您添加对 ThirdPartyLibrary
到 MyApplication
的显式依赖。这意味着这种依赖应该一直存在。
仅供参考,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