Maven高级篇
分模块开发与设计
将项目按功能或模块进行拆分,分模块对项目进行开发。
好处:降低耦合,方便团队协作
分模块开发注意事项
- 模块中仅包含当前模块对应的功能类与配置文件
- spring核心配置根据模块功能不同进行独立制作
- 当前模块所依赖的模块通过导入坐标的形式引入
- web.xml需要加载所有的spring核心配置文件
聚合
作用:聚合用于快速构建maven工程,一次性构建多个项目/模块。
制作方式:
- 创建一个空模块,打包类型定义为
pom
- 定义当前模块进行构建操作时关联的其他模块名称
注意事项:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关
完整pom文件
1 |
|
继承
作用:通过继承可以实现子工程使用父工程中的配置
创建方式:
- 在父工程中定义依赖管理
- 在所有子工程中定义依赖的父类工程坐标与位置
- 在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本
部分父pom文件
1 | <project> |
部分子pom文件
1 | <project> |
可继承的父类资源
名称 | 功能 |
---|---|
groupId |
项目组ID,项目坐标的核心元素 |
version |
项目版本,项目坐标的核心因素 |
description |
项目的描述信息 |
organization |
项目的组织信息 |
inceptionYear |
项目的创始年份 |
url |
项目的URL地址 |
developers |
项目的开发者信息 |
contributors |
项目的贡献者信息 |
distributionManagement |
项目的部署配置 |
issueManagement |
项目的缺陷跟踪系统信息 |
ciManagement |
项目的持续集成系统信息 |
scm |
项目的版本控制系统西溪 |
malilingLists |
项目的邮件列表信息 |
properties |
自定义的Maven属性 |
dependencies |
项目的依赖配置 |
dependencyManagement |
项目的依赖管理配置 |
repositories |
项目的仓库配置 |
build |
包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等 |
reporting |
包括项目的报告输出目录配置、报告插件配置等 |
继承与聚合的区别
作用:
- 聚合:用于快速构建项目
- 继承:用于快速配置项目
相同点:
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom.xml文件中
- 聚合与继承均属于设计型模块,并无实际的模块内容
不同点:
- 聚合是在当前模块中配置关系,聚合可以感知参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
属性
属性分类5大类:
- 自定义属性
- 内置属性
- Setting属性
- Java系统属性
- 环境变量属性
自定义属性
作用:等同于定义变量,方便统一维护
定义格式:
1 | <!--定义自定义属性--> |
调用格式:
1 | <dependency> |
内置属性
作用:使用maven内置属性,快速配置
调用格式:
1 | ${basedir}或 ${object.basedir}:读取基础路径 |
Setting属性
作用:使用Maven配置文件setting.xml中的标签属性,用于动态配置
调用格式:
1 | ${settings.localRepository} |
Java系统属性
作用:读取Java系统属性
调用格式:
1 | ${user.home} |
系统属性查询方式:
1 | mvn help:system |
环境变量属性
作用:读取操作系统中的环境变量
调用格式:
1 | ${env.JAVA_HOME} |
环境变量属性查询方式:
1 | mvn help:system |
版本管理
- SNAPSHOT(快照版本):开发中的版本,或测试版本。
- RELEASE(发布版本):已经开发完上线的版本。
工程版本号约定规范:
- 主版本.次版本.增量版本.里程碑版本
- 主版本:项目重大架构的变更
- 次版本:较大功能的增加和变化,或者全面修复系统漏洞
- 增量版本:表示有重大漏洞修复
- 里程碑版本:表名一个版本的里程碑(版本内部)。这一的版本同下一个正式版本相比,相对很不稳定,有待更多的测试。
- 示例:6.0.7.RELEASE
多配置文件统一管理
作用:在任意配置文件中加载pom文件中定义的属性
配置方式:
- 在pom文件中设定配置文件路径
- 开启加载pom属性过滤功能
- 在pom文件中设定属性
- 在任意配置文件中使用
${xxx.属性}
格式引用pom属性
1 | <properties> |
在/src/main/resources/jdbc.properties
文件中引入pom属性
1 | jdbc.driver=com.mysql.jdbc.Driver |
多环境开发配置
多环境配置
1 | <!--创建多环境--> |
加载指定环境
作用:加载指定环境配置
调用格式
1 | 格式 |
设置默认启动环境
设置默认启动,若当前环境为常用环境,可以将其设置为默认启动项,这样,在执行命令的时候就无需指定环境
1 | <profile> |
跳过测试
跳过测试环节的应用场景
- 整体模块功能未开发
- 模块中某个功能未开发完毕
- 单个功能更新调试导致其他功能失败
- 快速打包
使用命令跳过测试
1 | mvn install -D skipTests |
注意事项:执行的指令生命周期必须包含测试环节
使用配置跳过测试
1 | <pluginManagement> |
使用IDEA跳过测试
私服
Nexus私服
Nexus是Sonatype公司的一款maven私服。
下载地址:https://help.sonatype.com/repomanager3/product-information/download
Nexus安装、启动和配置
启动服务器(终端命令)
1 | nexus.exe /run nexus |
访问服务器:http://localhost:8081
修改基础配置信息:
- 安装目录下
etc/nexus-default.properties
文件中修改,比如端口号。
修改服务器运行配置信息:
- 安装目录下
bin/nexus.vmoptions
文件中保存有nexus服务器启动对应的配置信息,例如占用内存空间。
仓库分类
- 宿主仓库hosted
- 保存无法从中央仓库获取的资源
- 自主研发
- 第三方非开源项目
- 保存无法从中央仓库获取的资源
- 代理仓库proxy
- 代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库
- 仓库组group
- 将若干个仓库组成一个群组,简化配置
- 仓库组不能保存资源,属于设计型仓库
访问私服与组件上传
本地仓库访问私服配置
配置本地仓库访问私服的权限(setting.xml)
1 | <servers> |
组件上传
配置当前项目访问私服上传资源的保存位置(pom.xml)
1 | <!-- 发布配置 --> |
上传方式:
- 发布资源到私服命令
mvn deploy
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 FloweryMidgard!