对Maven来说很新,有人请向我解释一下使用Maven模块与仅仅在你的Maven项目中添加一个依赖项到工作区中的另一个Maven项目之间的区别吗?你什么时候使用一个?Maven依赖vs多模块?
回答
依赖项是预构建的实体。您从Maven Central(或Nexus等)获得该依赖项的工件。对属于其他团队或项目的代码使用依赖关系是很常见的。例如,假设您需要Android中的一个CSV库。你会把它作为依赖。
Maven模块的构建就像您的项目一样。对项目拥有的组件使用Maven模块是很常见的。例如,也许你的项目创建了三个jar文件。
可以将依赖关系视为您需要用于构建和/或运行代码的lib/jar(也称为Maven术语中的工件)。 此工件可以由您的多模块项目的某个模块或第三方预构建库(例如log4j)构建。
maven的一个概念是每个模块都会输出一个工件(比如一个jar)。因此,如果是复杂的项目,将项目分成多个模块是个好主意。这些模块可以通过声明的依赖关系相互依赖。 请参阅http://books.sonatype.com/mvnex-book/reference/multimodule-sect-intro.html举例说明Web应用程序如何拆分为父模块和子模块以及它们如何链接。
Maven最容易混淆的一个方面是,父pom既可以作为parent
,也可以作为aggregator
。您在Maven的思考功能
99%是parent
POM方面,当你继承之类的东西repositories
,plugins
,最重要的是,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的,没有必要聚集
- 1. Maven多模块依赖关系共享
- 2. 的Maven - 模块和moduleSet VS依赖和dependencySets
- 3. Maven的模块依赖和资源
- 4. 作为模块的Maven依赖关系
- 5. 依赖于多模块Maven项目模块时,模块不会产生伪影
- 6. 将模块依赖添加到Intellij Maven模块
- 7. Maven循环与多模块项目依赖关系
- 8. 多模块Maven项目中的聚合依赖关系
- 9. maven在多模块项目中建立依赖关系的jar
- 10. 在Eclipse的Maven依赖分辨率多个模块
- 11. Maven多模块项目中的自动装配依赖关系
- 12. 多模块项目中的Maven测试依赖项
- 13. Maven多模块:聚合公共依赖在一个单一的?
- 14. Maven多个模块依赖关系构建
- 15. 检查依赖性版本在多模块Maven项目
- 16. 在Eclipse多模块项目中缺少Maven依赖关系
- 17. 多模块maven项目未部署可执行文件的依赖模块Jar
- 18. Browserify模块依赖
- 19. 角模块依赖
- 20. Maven依赖关系 - 版本vs更新
- 21. Git子模块vs Git子树vs依赖管理器CocoaPods
- 22. 行家:多模块HAR依赖
- 23. Maven的:依赖
- 24. Maven依赖
- 25. Maven的依赖
- 26. Maven的依赖
- 27. Maven多模块
- 28. AngularJS模块应用依赖
- 29. Clojure模块依赖关系
- 30. Angular2模块循环依赖?
你是说用模块内*一个项目划分代码*,但使用依赖于共享代码*之间*项目? – GlenPeterson 2018-02-15 00:31:42
@GlenPeterson是的。 – 2018-02-18 00:29:34