一自动构建工具 maven
1. 传统工程在开发中存在的问题
- 一个项目就是一个工程
- 项目中需要的jar要手动 “复制”,“粘贴”到 WEB_INf/lib目录下
- jar包需要 别人 替我们准保好或到官网下载
- 一个jar包依赖其他jar包需要自己手动 加入项目中
2. maven帮我们解决了 什么?
- maven可以将一个工程 拆分成多个工程
- 借助maven可以帮我们把jar保存到仓库中,有需要使用的工程之间引用这个文件接口,不需要复制jar
- 直接导入jar的坐标就行
- maven导入一个jar会把其他jar传递过来
3.maven是什么?
是一款服务于java平台的自动化构建工具
4.构建各个环节
- 清理:将以前编译得到的class字节码文件删除,为下一次编辑做准备
- 编译:将java源程序编译成class字节码文件
- 测试:自动测试,自动调用junit程序
- 报告:测试程序执行的结果
- 打包:动态web工程打war包,java工程达成jar包
- 安装:将打包得到的文件复制到仓库中指定位置
- 部署:将动态web工程生成的war包复制到servlet容器指定目录,使其可以运行
5.常用命令
- mvn clear:清理
- mvn complie:编译主程序
- mvn test-complie:编译测试程序
- mvn test:执行测试
- mvn package:打包
- mvn install:安装
- mvn site:站点
6.坐标
使用下面三个向量在仓库中唯一定位一个maven工程
:公司或者组织域名倒写+项目名
:模块名
:版本号
7.仓库
仓库的分类:
- 本地仓库:为当前电脑上所有maven工程服务
- 远程仓库:
私服:架设到当前局域网中,为局域网所有maven工程服务
中央仓库:架设在internet上,为全世界maven工程服务
中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度
3.仓库中保存的内容: - maven自身所需插件
2.第三方框架或工具jar包
3.我们自己开发的maven工程
8依赖
- maven解析依赖信息时会到本地仓库中查找被依赖jar包,对于我们自己开发的maven工程,可以mvn instaill安装进入仓库
- 依赖的范围
- compile范围依赖
- 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:有效
- test范围依赖
- 对主程序是否有效:无效
- 对测试程序是否有效:有效
- 是否参与打包:不参与
- 典型例子:junit
- compile范围依赖
- 对主程序是否有效:有效
- 对测试程序是否有效:有效
- 是否参与打包:不参与打包
- 是否参与部署:不参与
- 典型例子:servlet-api.jar
- compile范围依赖
9生命周期
- 各个构建环节执行顺序不能打乱,必须按照正确顺序运行
- maven核心程序定义了抽象的生命周期,是由插件完成
- 不论执行生命周期哪一个阶段,都是从这个生命周期最初位置开始执行
10依赖高级
-
依赖的传递性
- 直接依赖
- 间接依赖:传递过来的依赖
-
依赖的排除
- 需要设置排除依赖的场合(不稳定的jar,需要排除)
- 依赖排除设置方式
<exclusions>
<exclusion>
<groupId>commonslogging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
-
依赖的原则
- 作用:解决模块工程之间的jar包冲突问题
- 最短路径优先原则
- 路径相同时先声明者优先(dependency声明顺序)
-
统一管理依赖的版本
- 自定义配置方式
①在properties标签内使用自定义标签统一声明版本号
- 自定义配置方式
<properties>
<queen.spring.context.version>4.1.2.RELEASE</queen.spring.context.version>
</properties>
②在需要统一版本号的位置,使用${自定义标签名}引用声明的版本号
11继承
<dependecyManagement> </dependecyManagement>
- 统一管理各个模块工程对junit依赖的版本
- 步骤1.创建一个父maven工程 注意:打包方式为pom
- 2.在子工程声明对父工程的 引用
- 3.在父工程统一管理jar依赖,子工程不需要加入依赖版本
- 配置继承后,执行安装命令要先安装 父工程的。
12聚合
<modules>
<module>PYG-pojo</module>
<module>PYG-dao</module>
<module>PYG-Commons</module>
...
</modules>
- 作用:一键安装各个模块的工程
- 配置方式:在一个总的模块聚合工程中配置各个参与聚合的模块
- 使用方式:再聚合 工程pom.xml右键maven install