【问题标题】:Maven: Aggregation vs. DependencyMaven:聚合与依赖
【发布时间】:2011-03-21 14:11:01
【问题描述】:

我对 Maven 非常陌生,现在正在尝试设置我的第一个项目树。我很难理解两种选择之间的区别:

我有要捆绑的 jar 和 war 项目(各两个)。传统上,我只会创建一个包含所有四个作为依赖项的 ear 项目。

现在我阅读了有关 poms 聚合的信息,但不知道该怎么办(请参阅http://maven.apache.org/pom.html#Aggregation)。我应该创建一个包含四个项目的聚合 POM 吗?

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

【问题讨论】:

  • SO 的约定是使用标记 maven-2,除非您指的是(死)maven 版本 1。如果您问我,这很麻烦,但就是这样.为你改变了。

标签: java maven-2 dependencies aggregation


【解决方案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构建整棵树。

这里的假设是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

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

【讨论】:

  • 感谢您的回答!澄清一下:在您的示例中,如果我不会使用“根”项目,而只会构建 project5(即“mvn install”),那么它不会自动重新编译项目 1 -4,对吧?我想这就是我错误的假设,也是导​​致我困惑的原因。
  • 完全正确。 maven 只能在当前目录下工作。它将从本地或远程存储库中解析其他工件,但除非它们在当前树内,否则不会重新构建它们。
猜你喜欢
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 2019-08-23
  • 2019-02-25
  • 1970-01-01
  • 2017-09-15
相关资源
最近更新 更多