Java 不';t Maven依赖关系管理是否会创建不必要的依赖关系?

Java 不';t Maven依赖关系管理是否会创建不必要的依赖关系?,java,maven,Java,Maven,假设我有3个项目,C1,C2,p。其中p是父项目,C1和C2是子项目w.r.t。pom.xml文件。假设有两个依赖项D1和D2。如果C1依赖于D1,C2依赖于D2,那么将这两个依赖项都移动到父项目中有意义吗?添加到父节点不会强制C2同时依赖于D1和D2而不仅仅是D2吗?(与C1类似) 添加到父节点不会强制C2同时依赖于D1和D2而不仅仅是D2吗?(与C1类似) 将D2依赖项从C2移动到父级将使C1和C2都依赖于D2 通常,将依赖项从一个子项移动到父项将使父项的所有子项依赖于移动的依赖项 将这两个

假设我有3个项目,C1,C2,p。其中p是父项目,C1和C2是子项目w.r.t。pom.xml文件。假设有两个依赖项D1和D2。如果C1依赖于D1,C2依赖于D2,那么将这两个依赖项都移动到父项目中有意义吗?添加到父节点不会强制C2同时依赖于D1和D2而不仅仅是D2吗?(与C1类似)

添加到父节点不会强制C2同时依赖于D1和D2而不仅仅是D2吗?(与C1类似)

将D2依赖项从C2移动到父级将使C1和C2都依赖于D2

通常,将依赖项从一个子项移动到父项将使父项的所有子项依赖于移动的依赖项

将这两个依赖项都移动到父项目上有意义吗

这取决于你想要达到的目标

例如,如果每个模块都使用某个实用程序库,那么将依赖项移动到父级可能是有意义的

但是,如果一个依赖项仅由一个子模块使用,那么让所有模块都依赖于这个依赖项就没有多大意义


例如,如果像SpringMVC这样的框架仅由Web应用程序(控制器)模块使用,那么让持久层模块依赖SpringMVC是没有意义的

作为最佳实践,我们应该声明父项目中的依赖项或API,这些依赖项或API在所有子项目中使用,并且版本锁定(极少数情况下,依赖项的版本会发生更改,或者根本不会发生更改)。你的情况也是如此

将这两个依赖项都移动到父项目上有意义吗

  • 如果C1依赖于D1,C2依赖于D2,建议在子项目中声明它们
添加到父节点不会强制C2同时依赖于D1和D2而不仅仅是D2吗

  • 是的,会的

将依赖项添加到父项通常不是一个好主意,在您的示例中也不是一个好主意,因为这样会导致依赖项从父项继承到子项,从而导致C2依赖于D1和D2,而D1和D2并非预期的。您可以做的是将定义(版本等)放入父级(dependencyManagement),然后只将依赖项放入不带版本的子级。因此,您有一个中心点,可以在这里维护不同依赖项的版本。在这种情况下,您经常会看到父级有一个名为
d1.version
d2.version
的属性,这些属性在定义依赖项时用作子模块中的变量。这将使依赖项保持在其应有的位置,但允许您在一个位置维护依赖项版本。@dmos这无助于防止继承您不喜欢的两个位置的依赖项。除此之外,这些东西很难阅读和维护。最好的方法是,对于您在项目中使用的版本,只有一个位置(DependencyManager)。