多层项目的ManageDependencies的Maven问题

时间:2019-03-17 20:48:02

标签: java maven

说我有一个多层的Maven项目,其中有两个模块和五个叶子。 (我的项目实际上有14个模块和78个叶子,但是我的问题仅需两个即可。)

父POM构建模块并使用 dependencyManagement 定义我的第三方依赖关系。

在模块POM中,我使用 dependencyManagement 声明我的“内部”依赖关系(例如 Module_A 是'common',而 Module_A2 取决于< em> Module_A1 )

parent POM
 |  -- DependencyManagement
 |    -- 3rd party dependencies (e.g. commons-logging, junit)
 |
 +-+-- Module_A POM
 | |   -- DependencyManagement 
 | |      -- Project inter-dependencies (Module_A1, Module_A2)
 | |
 | +---- Module_A1 POM
 | +---- Module_A2 POM (depends on _A1)
 | +---- Module_A3 POM (depends on _A1, _A2)
 |
 +-+-- Module_B POM
   |   -- DependencyManagement 
   |      -- Project inter-dependencies (Module_A1, Module_B1)
   |
   +---- Module_B1 POM (depends on _A1)
   +---- Module_B2 POM (depends on _A1, _B1)

每个叶子( Module_A1 .. Module_B2 )声明其依赖项,而没有版本。父依赖项被声明为完整的方式,而AFAICT这是一个干净的Maven结构,并且大多数情况下都按预期运行。

我可以从 Module_A 的文件夹中构建 Module_A 没问题,一切正常。它发现在父POM级别声明的 commons-logging 和A1 / A2正常工作。所以在语法上我还可以。但是,如果我走到父POM并尝试构建整个项目,则会失败,并以 Module_A 抱怨项目相互依赖项的 dependencies.dependency.version 。当我直接调用 Module_A / pom.xml 而不是通过父POM调用 Module_A 文件夹时,这些文件确实有效。即使我尝试通过 -pl Module_A 从父文件夹仅执行 Module_A / pom.xml ,它也会失败。因此,通过父 POM.xml 文件运行Maven会破坏 Module_A / POM.xml

这意味着您不能在项目的两个级别上使用 dependencyManagement ,尽管我找不到任何告诉我不要这样做的东西。如果是这种情况,我似乎有两种选择:

A)将我的项目内部相互依赖性上移到父 POM.xml 。如果这样做,感觉就像我在顶部完全指定了我的所有依赖关系,而我的父级POM变得混乱不堪,过度指定了我的项目。

B)从 Module_A 中删除 dependencyManagement 标记并直接指定模块,但是随后我将所有已声明的模块包括在叶子POM中( Module_A1 < / em>等),这不是我想要的。 (我知道这个人很糟糕)

我意识到 dependencyManagement 实际上只是一系列变量声明,因此,如果我将内部依赖关系移到父POM上,则可能不会受到任何伤害,但这感觉很草率。就像我不太了解该如何按子系统将我的模块依赖项干净地隔离开来,并将它们全部都推送到最顶层的POM上一样。

我知道有些项目比我的还要复杂。我所看到的只是将数百个依赖项转储到了父POM中,从而造成了丑陋的混乱。就我而言,我将在父POM中定义我的78个叶子模块中的大多数,这感觉是错误的方法。有没有更好的方法,或者这是父POM的目的吗?要指定有关环境的所有内容,并让所有下部模块定义得尽可能少?

0 个答案:

没有答案