Maven
Bug收集
见【软件】Java开发环境相关工具IDEA、JDK、Maven
Maven-相关书籍
Maven-资源
- 黑马程序员Maven全套教程,maven项目管理从基础到高级,Java项目开发必会管理工具maven 
- 资料(PPT、安装包、代码等)
链接:https://pan.baidu.com/s/1Z8csgq4phdUtqkwq81fqMg
提取码:ewh9 - maven笔记文字版
 
 - 资料(PPT、安装包、代码等)
 - 官网:http://maven.apache.org/
 - Maven官方文档
 - 下载地址:http://maven.apache.org/download.cgi
 - https://repo1.maven.org/maven2/
 - maven坐标查询:https://mvnrepository.com
 
Maven简介
IDEA对3.6.2及以上版本存在兼容性问题,为避免冲突,IDEA中安装使用3.6.1版本
- Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
 - POM(Project Object Model):项目对象模型
 

阿里云镜像仓库、settings文件
<mirror>  | 
settings.xml
  | 
下载版:
Maven工程目录结构

pom.xml(src同目录下创建)
  | 
构建命令
mvn compile# 编译mvn clean# 清理mvn test# 测试mvn package# 打包mvn install# 安装到本地仓库
插件创建maven工程
- 创建工程
 
mvn archetype:generate  | 
- 创建Java工程
 
mvn archetype:generate  | 
- 创建web工程
 
mvn archetype:generate  | 
Tomcat7插件
<build>  | 
依赖传递冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
 - 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
 - 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
 

Maven排除依赖和可选依赖
可选依赖指对外隐藏当前所依赖的资源–不透明
<dependency>  | 
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本一一不需要
<dependency>  | 
依赖范围
依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
作用范围
主程序范围有效(main文件夹范围内)
测试程序范围有效(test文件夹范围内)
是否参与打包(package指令范围内)
| scope | 主代码 | 测试代码 | 打包 | 范例 | 
|---|---|---|---|---|
| compile(默认) | Y | Y | Y | log4j | 
| test | Y | junit | ||
| provided | Y | Y | Servlet-api | |
| runtime | Y | Jdbc | 
依赖访问传递性
带有依赖范国的资源在进行传递时,作用范围将受到影响

生命周期与插件
项目构建生命周期:
Maven构建生命周期描述的是一次构建过程经历经历了多少个事件

clean生命周期:
- pre-clean 执行一些需要在clean之前完成的工作
 - clean 移除所有上一次构建生成的文件
 - post-clean 执行一些需要在clean之后立刻完成的工作
 
default构建生命周期

site构建生命周期
pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上
插件
- 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
 - 默认maven在各个生命周期上绑定有预设的功能
 - 通过插件可以自定义其他功能
 
<build>  | 
分模块开发与设计

ssm_pojo拆分
新建模块,拷贝原始项目中对应的相关内容到ssm_pojo模块中
- 今实体类(User)
 - 配置文件(无)
 
ssm_dao拆分
新建模块,拷贝原始项目中对应的相关内容到ssmdao模块中
- 数据层接口(UserDao)
 - 配置文件:保留与数据层相关配置文件(3个),注意:分页插件在配置中与SqlSessionFactoryBean绑定,需要保留
 - pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标
- spring
 - mybatis
 - spring整合mybatis
 - mysql
 - druid
 - pagehelper
 - 直接依赖ssm_pojo(ssm_pojo模块需install安装到本地仓库)
 
 
ssm_service拆分
新建模块,拷贝原始项目中对应的相关内容到ssm_service模块中
- xxxService、xxxServiceImpl
 - 配置文件:保留与数据层相关配置
 - pom.xml:引入数据层相关坐标,删除springmvc相关坐标
- spring
 - junit
 - spring整合junit
 - 直接依赖ssm_dao(ssm_dao模块需install安装到本地仓库)
 - 简接依赖ssm_pojo(因为ssm_dao引用了ssm_pojo)
 - 修改service模块spring核心配置文件名,添加模块名称,格式:applicationContext-service.xml
 - 修改dao模块spring核心配置文件名,添加模块名称,格式:applicationContext-dao.xml
 - 修改单元测试引入的配置文件名称,由单个文件修改为多个文件
 
 
ssm_controll拆分
新建模块(使用webapp模板),拷贝原始项目中对应的相关内容到ssm_controller模板中
- 表现层控制器类与相关设置类(Usercontroller、异常相关…)
 - 配置文件:保留与表现层相关配置文件(1个)、服务器相关配置文件(1个)
 - pom.xml:引入数据层相关坐标即可,删除springmvc相关坐标
- spring
 - springmvc
 - jackson
 - servlet
 - tomcat服务器插件
 - 直接依赖ssm_service(ssm_service模块需install安装到本地仓库)
 - 问接依赖ssm_dao、ssm_pojo
 
 
分模块开发小节
- 模块中仅包含当前模块对应的功能类与配置文件
 - Spring核心配置根据模块功能不同进行独立制作
 - 当前模块所依赖的模块通过导入坐标的形式加入当前模块后才可以使用
 - web.xm需要加载所有的spring核心配置文件
 
聚合
作用:聚合用于快速构建maven工程,一次性构建过个项目/模块
制作方式:
1.创建一个空模块,打包类型定义为pom
<packaging>pom</packaging>  | 
2.定义当前模块进行构建操作时关联的其他模块名称
<modules>  | 
注意事项:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关
继承
制作方式
作用:通过继承可以实现在子工程中沿用父工程中的配置
- maven中的继承与Java中继承相似,在子工程中配置继承关系
 
制作方式:
- 在子工程中声明其父工程坐标与对应的位置
 
<!--定义该工程的父工程-->  | 
依赖定义
在父工程中定义依赖管理
<!--声明此处进行依赖管理-->  | 
依赖使用
在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本
<!--导入资源文件pojo-->  | 
继承的资源

继承与聚合对比
作用:
- 聚合用于快速构建项目
 - 继承用于快速配置
 
相同点:
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
 - 聚合与继承均属于设计型模块,并无实际的模块内容
 
不同点:
- 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
 - 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
 
属性类别
自定义属性
作用:等同于定义变量,方便统一维护
定义格式:
<!--定义自定义的属性-->  | 
调用格式:
<!--springmvc环境-->  | 
内置属性
作用:使用Maven内置属性,快速配置
例如,父工程和子工程的版本号一样,可以直接使用父工程的版本内置属性${version}:
<!--添加自己工程的依赖-->  | 
Setting属性
作用:使用Maven配置文件setting.xml中的标签属性,用于动态配置
调用格式:${settings.localRepository}
Java系统属性
作用:读取Java系统属性
调用格式:${user.home}
系统属性查询方式:mvn help:system
环境变量属性
作用:使用Maven配置文件setting.xml中的标签属性,用于动态配置
调用格式:${env.JAVA_HOME}
环境变量查询方式:mvn help:system
版本管理
1.工程版本
SNAPSHOT快照版本
- 项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
 - 快照版本会随着开发的进展不断更新
 
RELEASE发布版本
- 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本
 
2.工程版本号约定
约定规范:
<主版本>.<次版本>.<增量版本>.<里程碑版本>
主版本∶表示项目重大架构的变更,如∶spring5相较于spring4的迭代
次版本∶表示有较大的功能增加和变化,或者全面系统地修复漏洞
增量版本∶表示有重大漏洞的修复
里程碑版本∶表明一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相比,相对来说不是很稳定,有待更多的测试
范例:
- 5.1.9.RELEASE
 
资源配置
1.资源配置多文件维护

2.配置文件引用pom属性
作用:在任意配置文件中加载pom文件中定义的属性
调用格式:${jdbc.url}
开启配置文件加载pom属性
<!--配置资源文件对应的信息-->  | 
多环境开发配置
<!--创建多环境-->  | 
加载指定环境:mvn 指令 -P 环境定义id
mvn install -P pro_env
跳过测试
跳过测试环节的应用场景:
- 整体模块功能未开发
 - 模块中某个功能未开发完毕
 - 单个功能更新调试导致其他功能失败
 - 快速打包(因为测试需要耗费时间)
 - …
 
2.使用命令跳过测试:
mvn 指令 -D skipTests
注意:执行的指令生命周期必须包含测试环节
3.使用界面操作跳过测试

4.使用配置跳过测试
<plugin>  | 
私服
Nexus安装、启动与配置
启动服务器(命令行启动):nexus.exe /run nexus
访问服务器(默认端口8081):http://localhost:8081
修改基础配置信息:安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口
修改服务器运行配置信息:安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默占用内存空间
私服-资源获取

私服仓库分类
宿主仓库hosted
- 保存无法从中央仓库获取的资源:自主研发、第三方非开源项目
 
代理仓库proxy
- 代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库
 
仓库组group
- 将若干个仓库组成一个群组,简化配置
 - 仓库组不能保存资源,属于设计型仓库
 
私服-资源上传
提供信息:保存位置(宿主仓库)、资源文件、对应坐标
私服-idea环境中资源上传与下载

访问私服配置(本地仓库访问私服)
配置本地仓库访问私服的权限(setting.xml)
<servers>  | 
配置本地仓库资源来源(setting.xml)
<!--中央仓库的资源从阿里云下载-->  | 
访问私服配置(项目工程访问私服)
配置当前项目访问私服上传资源的保存位置(pom.xml)
<!--发布配置管理-->  | 
发布资源到私服命令:mvn deploy