如何在Maven中正确添加依赖项

时间:2012-02-28 13:44:55

标签: maven

这是我项目的当前结构(POM中的依赖关系)

- commons

- generator
  -> dependencies: commons

- database
  -> dependencies: commons, generator

- statemachine
  -> dependencies: commons, database

- server
  -> dependencies: commons, statemachine, database, generator

很明显,这取决于哪个。但是我不喜欢冗余。如果我更改了一个版本,我将不得不在任何地方更改它。

所以(对我来说)更好的解决方案可能是这个

- commons

- generator
  -> commons

- database
  -> generator

- statemachine
  -> database

- server
  -> statemachine

这要简单得多。另一方面,您无法看到真实的结构,您必须使用有效的POM(如果您在IDE中有此选项)。

所以我的问题是:哪种方法更好,为什么?或者有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

在我看来,只要您使用例如代码或API,就应该直接声明您需要的依赖项。 “公共”你应该在你的POM中有这种依赖。否则,当您依赖的传递依赖关系将被删除时,您已经发布的版本会遇到几个问题。

版本问题由dependency mediation“解决”。我希望这会有所帮助。

答案 1 :(得分:1)

实际上,这是一个品味问题。我同意第二种方法更容易,但我个人认为第一种方法更好,因为它可以更清晰地描述您的项目依赖关系结构。

如果这是一个多模块项目,并且上述所有项目都是共享相同版本的项目模块,那么您可以简单地将依赖项声明为:

<dependency>
  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>${project.version}</version>
</dependency>

答案 2 :(得分:0)

我尽量保持每个项目的依赖关系尽可能小,但是如何做到这一点取决于:

如果依赖项是我的项目,那么假设一个分层链更有意义,因为我控制着哪些项目依赖于什么,而且我更有可能在相当警惕时在项目的“聚合”中定义版本。

如果依赖项不是我的项目,IMO更有意义的是单独列出它们。这提供了更细粒度的版本控制,并允许项目定义它们更大的余地,而不是被迫保留已定义的任何版本。

(可以手动排除依赖关系或将其包含在顶级依赖关系中。)