Inheritance 声明为依赖项或父项

Inheritance 声明为依赖项或父项,inheritance,maven,dependencies,Inheritance,Maven,Dependencies,如果您有项目A,并且它需要项目B的所有依赖项,那么您是使用继承将项目B声明为项目A的父级,还是声明为项目A的依赖项?它们似乎具有相同的效果。我想说,如果项目B打算充当“通用父级”或类似的角色,也就是说,对于具有相同依赖关系(或其依赖关系具有相同的起始点)的许多项目来说,都是一个起始点,那么就直接让B成为父级 否则,如果它实际上更像是一个“方便的东西”——例如,它有许多项目会发现有用的实用程序/核心类型方法,但是并不依赖于它们的存在,那么它在逻辑上是一个依赖项 你甚至可以考虑把B项目分成两条。这就

如果您有项目A,并且它需要项目B的所有依赖项,那么您是使用继承将项目B声明为项目A的父级,还是声明为项目A的依赖项?它们似乎具有相同的效果。

我想说,如果项目B打算充当“通用父级”或类似的角色,也就是说,对于具有相同依赖关系(或其依赖关系具有相同的起始点)的许多项目来说,都是一个起始点,那么就直接让B成为
父级

否则,如果它实际上更像是一个“方便的东西”——例如,它有许多项目会发现有用的实用程序/核心类型方法,但是并不依赖于它们的存在,那么它在逻辑上是一个依赖项

你甚至可以考虑把B项目分成两条。这就是我过去所做的:

mygroup parent
是一个项目,它只包含一个POM文件,其中包含依赖项,我希望每个项目都能得到这些依赖项,从而强制执行标准方法。例如,我有
TestNG
Mockito


mygroupcore
是一个成熟的Java项目,它有很多使用方便的东西,但不是必须的。我有一些特定于我的站点的助手方法,还有一些依赖项,比如Apache
HttpClient
和Google
Guava

这两种方法是不同的,一种是继承,另一种是简单的依赖

根据依赖关系,您将只拥有项目B的二进制可传递依赖关系

通过使用作为父项目,您将继承插件、构建模型、存储库、依赖关系管理、依赖关系等配置,这取决于具体情况

我的经验法则是,对于scm配置、项目配置和开发或公司标准,我使用父项目(继承)