Maven:聚合与依赖关系

2022-09-04 22:02:41

我对Maven很陌生,现在正试图建立我的第一个项目树。我正在努力理解两种选择之间的区别:

我有罐子和战争项目(每个两个)我想捆绑。传统上,我只是创建一个耳朵项目,将这四个部分作为依赖项。

现在我读到了poms的聚合,不知道该怎么办(见 http://maven.apache.org/pom.html#Aggregation)。我应该使用这四个项目创建一个聚合的 POM 吗?

我想我的问题是:如果依赖关系是我的“自己”项目之一,那么模块和依赖项之间的最大区别是什么。


答案 1

模块只是组织事物的一种方式。

在多模块构建中,您可以在一个步骤中构建整个工件树(请记住Joel Test)。但是,其中每个项目都将是一个单独的项目,可以单独引用为依赖项。

下面是一个示例布局,用括号括起来。

root (pom)
    - project1 (jar)
    - project2 (war) -> references project1 as dependency
    - project3 (jar)
    - project4 (war) -> references project3 as dependency
    - project5 (ear) -> references project2 and project4 as dependency

调用根目录以构建整个树。mvn install

此处的假设是,项目 1 仅由项目 2 使用,而项目 3 仅由项目 4 使用。否则,这是一个更复杂的方案。

root (pom)
    - project1 (jar)
    - project2 (jar)
    - project3 (war) -> references project1 and project2 as dependency of scope provided
    - project4 (war) -> references project1 and project2 as dependency of scope provided
    - project5 (ear) -> references project1 through project4 as dependency

因此,模块消除了独立构建多个项目的工作,但您仍然需要自己管理依赖项。


答案 2

推荐