Maven:聚合与依赖

apr*_*poz 13 java dependencies maven-2 aggregation

我是Maven的新手,我刚刚尝试建立我的第一个项目树.我很难理解两种选择之间的区别:

我有jar和war项目(每个两个)我想捆绑.传统上我只是创建一个耳朵项目,其中所有四个都是依赖项.

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

我想基本上我的问题是:如果依赖项是我自己的"项目"之一,那么模块和依赖项之间的最大区别是什么.

Sea*_*oyd 11

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

在多模块构建中,您可以在一个步骤中构建整个工件树(请记住Joel测试).但是,这些中的每一个都是单个工件,可以单独作为依赖项引用.

这是一个示例布局,用括号括起来.

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
Run Code Online (Sandbox Code Playgroud)

调用mvn install根目录来构建整个树.

这里假设project1仅由project2使用,project3仅由project4使用.否则这是一个更复杂的场景.

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
Run Code Online (Sandbox Code Playgroud)

因此,模块会独立完成构建多个项目的工作,但您仍需要自己管理依赖项.

  • 感谢您的回答!只是为了说清楚:如果,在你的例子中,我不会使用'root'项目,而只是构建project5(即'mvn install'那里),那么它将_not_自动重新编译项目1-4,对吧?我猜这就是我错误的假设,也是导​​致我困惑的原因. (2认同)