这是我项目的当前结构(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中有此选项)。
所以我的问题是:哪种方法更好,为什么?或者有更好的方法吗?
答案 0 :(得分:2)
在我看来,只要您使用例如代码或API,就应该直接声明您需要的依赖项。 “公共”你应该在你的POM中有这种依赖。否则,当您依赖的传递依赖关系将被删除时,您已经发布的版本会遇到几个问题。
版本问题由dependency mediation“解决”。我希望这会有所帮助。
答案 1 :(得分:1)
如果这是一个多模块项目,并且上述所有项目都是共享相同版本的项目模块,那么您可以简单地将依赖项声明为:
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>${project.version}</version>
</dependency>
答案 2 :(得分:0)
我尽量保持每个项目的依赖关系尽可能小,但是如何做到这一点取决于:
如果依赖项是我的项目,那么假设一个分层链更有意义,因为我控制着哪些项目依赖于什么,而且我更有可能在相当警惕时在项目的“聚合”中定义版本。
如果依赖项不是我的项目,IMO更有意义的是单独列出它们。这提供了更细粒度的版本控制,并允许项目定义它们更大的余地,而不是被迫保留已定义的任何版本。
(可以手动排除依赖关系或将其包含在顶级依赖关系中。)