2014-10-27 147 views
4

对Maven来说很新,有人请向我解释一下使用Maven模块与仅仅在你的Maven项目中添加一个依赖项到工作区中的另一个Maven项目之间的区别吗?你什么时候使用一个?Maven依赖vs多模块?

回答

6

依赖项是预构建的实体。您从Maven Central(或Nexus等)获得该依赖项的工件。对属于其他团队或项目的代码使用依赖关系是很常见的。例如,假设您需要Android中的一个CSV库。你会把它作为依赖。

Maven模块的构建就像您的项目一样。对项目拥有的组件使用Maven模块是很常见的。例如,也许你的项目创建了三个jar文件。

+0

你是说用模块内*一个项目划分代码*,但使用依赖于共享代码*之间*项目? – GlenPeterson 2018-02-15 00:31:42

+1

@GlenPeterson是的。 – 2018-02-18 00:29:34

2

可以将依赖关系视为您需要用于构建和/或运行代码的lib/jar(也称为Maven术语中的工件)。 此工件可以由您的多模块项目的某个模块或第三方预构建库(例如log4j)构建。

maven的一个概念是每个模块都会输出一个工件(比如一个jar)。因此,如果是复杂的项目,将项目分成多个模块是个好主意。这些模块可以通过声明的依赖关系相互依赖。 请参阅http://books.sonatype.com/mvnex-book/reference/multimodule-sect-intro.html举例说明Web应用程序如何拆分为父模块和子模块以及它们如何链接。

1

Maven最容易混淆的一个方面是,父pom既可以作为parent,也可以作为aggregator。您在Maven的思考功能

99%是parent POM方面,当你继承之类的东西repositoriesplugins,最重要的是,dependencies

依赖关系很难在每个构建期间评估的库之间的有形关系。如果你认为你的软件是一餐,它基本上是说A requires ingredient B

让我们假设你准备烤宽面条。那么你的依赖关系链会是这个样子:

lasagne 
    <- meatSauce 
     <- groundBeef 
     <- tomatoPaste 
    <- cheese 
    <- noodles 

关键的一点是,上述各项目(meatSause,牛绞肉,奶酪等)的个体建立有自己的个人的依赖集。

相比之下,属于聚集你的POM中的唯一部分是modules部分:

<modules> 
    <module>meatSauce</module> 
    <module>groundBeef</module> 
    <module>tomatoPaste</module> 
    <module>cheese</module> 
    <module>noodles</module> 
</modules> 

聚集简单地告诉您创建引擎,它应该运行这5个建立在快速连续:

groundBeef -> tomatoPaste -> cheese -> noodles -> meatSauce 

聚合的主要好处是便利(只需点击构建一次),并确保构建的顺序正确(例如,您不想在tomatoPaste之前构建肉酱)。

尽管如此,即使您将库作为独立项目组织,而没有module聚合,您的构建仍然会按照正确的顺序构建。此外,如果一个依赖项目发生变化(例如,更改groundBeef将自动触发meatSauce),则Jenkins和Eclipse都具有触发构建的机制。

因此,如果你建立了詹金斯或者Eclipse的,没有必要聚集