博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot系列: Maven多项目管理
阅读量:4593 次
发布时间:2019-06-09

本文共 3471 字,大约阅读时间需要 11 分钟。

这篇是 maven 项目管理的第二篇, 讲解使用 maven 进行多个项目管理, 之前有一篇是 maven 的基础知识. 

一个完整的解决方案通常都会包含多个项目, 这些项目往往会有一些公用的依赖, 比如都依赖 SpringBoot, 各个项目之间也有依赖关系. 显然如果在每个项目都设置这些信息, 并不是很好, 一个明显的缺点是, 当要统一升级某个基础 jar 包, 所有项目 pom.xml 都需要更新.

对此 Maven 有很好的解决思路, 即创建 aggregate project(或 multi-module project). maven multi-module 包含一个 parent 项目和多个子项目, 所以从逻辑上讲它们是有层次关系的. 但 Eclipse 中每个项目都是直接挂在 workspace 下的, 也就是说在文件系统上是没有层级关系的, 所以我们可以在 parent 项目名称上做点文章, 体现出它与众不同, 比如起名为 myproject-parent .

下面是个 Eclipse 项目关系图:

Workspace
├─ myproject-parent (通常仅仅包含一个 pom.xml 文件)
├─ myproject-webui
├─ myproject-api
└─ myproject-jobs

======================================
Parent 项目 pom.xml 一般包含的节点
======================================
0. packaging 节点, 对于 parent 项目, packaging 属性值为 pom
1. parent 节点: 对于 SpringBoot 项目, parent artifactId 应该为 spring-boot-starter-parent, 指定版本.
2. dependencyManagement/dependencies/dependency 节点, 经常使用 dependencyManagement 作为 jar 包版本仲裁, 在 dependencyManagement 下声明的依赖, 并不会被实际引入, 只有 dependencies/dependency 节点下的 jar 包才会被引入.
3. modules 节点, 设定本 parent 项目包含哪些 sub module 项目, 推荐在使用 profiles 节点下定义子模块, 而不是直接在 modules 节点下设定子模块.
4. properties 节点, 设定将所有项目共有的属性设置在这里.
5. build/plugins/plugin 节点: 将公用的插件放到这里, 比如 spring-boot-maven-plugin
6. dependencies/dependency 节点, 更推荐使用 dependencyManagement/dependencies/dependency.
7. profiles 节点, 这个下面在详细讲解.

----------------------------------
dependencyManagement 仲裁 jar 包版本
----------------------------------
Parent 项目中, 统一了 spring-core 版本为 4.3.5.RELEASE.

org.springframework
spring-core
4.3.5.RELEASE

 

在子项目中, 需要引入 spring-core 时就不必再指定版本号.

org.springframework
spring-core

 

如果某个子项目中, 需要引入一个其他版本的 spring-core 时, 在 dependencies 节点下直接指定想要的版本即可. 

org.springframework
spring-core
4.2.1.RELEASE

 

----------------------------------

使用 profiles
----------------------------------
通常一个较大规模的 Parent 项目会包含好几个 sub module 项目, 各个子项目之前可能有依赖, 可能没有依赖, 为了缩短编译时间, 最好设定不同的 profile , 不同 profile 中包含的不同的 sub-module 组合.

backend
../myproject-api
../myproject-webui
all
true
../myproject-api
../myproject-webui
../myproject-jobs

上面定义了两个 profile, 分别是 backend 和 all, maven 支持按 profile 进行编译.

仅编译 backend 相关的子模块:

mvn clean package -Pbackend

编译缺省的 profile:

mvn clean package

 

======================================

子项目中指定 parent pom 的位置
======================================

com.harry
myproject-parent
1.0-SNAPSHOT
../myproject-parent/pom.xml

 

======================================

参考
======================================
https://www.smartics.eu/confluence/display/BLOG/2013/07/22/Using+Aggregate+and+Parent+POMs
https://www.baeldung.com/maven 

 

转载于:https://www.cnblogs.com/harrychinese/p/SpringBoot_maven_multi-module.html

你可能感兴趣的文章
留言板
查看>>
点餐系统的设计与实现注意点与解决办法
查看>>
Java的基本类型
查看>>
POJ 3352 Road Construction(图论-tarjan)
查看>>
JS 强制类型转化
查看>>
Note:JSON
查看>>
Design Pattern ->Bridge
查看>>
ModelAndView返回mav时,报404
查看>>
spring配置xml的错误
查看>>
资金归集率比率sql
查看>>
JavaScript常用字符串操作方法总结
查看>>
LinkedList、ArrayList各自的使用场景,如何确认应该用哪一个?
查看>>
java 并发——内置锁
查看>>
微信小程序实现各种特效实例
查看>>
JAVA编程思想读书笔记(三)--RTTI
查看>>
[洛谷P3931]SAC E#1 - 一道难题 Tree
查看>>
设计模式学习总结:(5)装饰模式
查看>>
sql JOIN语句应注意on与where的区别
查看>>
[转载]python 详解re模块
查看>>
【经验】在CSS中定义a:link、a:visited、a:hover、a:active顺序
查看>>