问题
- 项目重点jar包必须手动复制、粘贴到WEBINF/lib中
- 浪费存储空间。借助maven,可以将jar包保存在仓库中,有需要的使用的工程,引用这个文件接口
- jar包有依赖的jar包
- maven可以包含依赖
- jar包需要手动下载
- maven可以以一种规范下载jar包
what’s maven
maven是一款服务于Java平台的自动化构建工具。
构建:以java源文件、框架配置文件、jsp、html、图片等资源为原材料,去生产一个可运行的项目的过程。
编译->部署->搭建
构建过程中的各个环节
- 清理:将以前比阿姨得到的旧的class字节码文件删除,为下一次编译做准备
- 编译:将java源代码编译成class字节码文件
- 测试:自动测试,自动调用junit程序
- 报告:测试程序执行的结果
- 打包:动态web工程打war包,java工程打jar包
- 安装:将打包得到的文件复制到仓库中的制定位置
- 部署:将动态web工程生成的war包覆知道servlet容器制定目录下,使其可运行
安装maven
- 安装Java,配置环境变量
- 安装maven,配置环境变量,验证 mvn -v
maven核心概念
- 约定的目录结构
为什么要遵守目录结构:maven自动编译需要知道不同种类的文件在哪里
- pom
- 坐标
- 依赖
- 仓库
- 生命周期/插件/目标
- 继承
- 聚合
常用的maven命令
- mvn clean :清理
- mvn compile : 编译主程序
- mvn test-compile:编译测试程序
- mvn test:执行测试
- mvn package:打包
- mvn install:安装
- mvn site:生成站点
1.2 依赖范围
- compile
- test
- provided
compile | test | provided | |
---|---|---|---|
对主程序是否有效 | ✅ | ❌ | ✅ |
对测试程序是否有效 | ✅ | ✅ | ✅ |
是否参与打包 | ✅ | ❌ | ❌ |
1.3 生命周期
- 各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
- maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
- 为了更好的实现自动化构建,无论执行生命周期的哪个阶段,构建都会从生命周期的第一个阶段开始执行。
clean生命周期:pre-clean -> clean -> post-clean
site生命周期:per-site -> site -> post-site -> site-deploy
default生命周期:
validate
generate-source
process-source
generate-resource
process-resources
compile
process-class
generate-test-sources
process-test-sources
test-compile
process-test-classes
test
prepare-package
package 接收编译好的代码,打包成可发布的格式,如jar
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装至本地仓库,以让其他项目依赖
deploy 将最终的包复制
1.4 在eclipse中使用maven
1.5 依赖【高级】
- 依赖的传递性
【好处】可传递的的依赖不必在每个模块工程中重复声明,在“最下面”的模块中声明一下即可。
【注意】非compile范围的依赖不能传递,所以在各个工程模块中,如果有需要就要重复声明依赖。
- 依赖的排除
<exclusions>
<exclusion>
<groupId>1111</groupId>
<artifactId>2222</artifactId>
</exclusion>
</exclusions>
- 依赖的原则
- 路径就近原则
- 路径长度相同时,先声明者优先
- 统一管理依赖的版本
spring各个jar包依赖的版本都是4.0.0,如果需要统一升级为4.1.1,怎么办
自定义统一声明版本号,作为变量,其他标签引用此变量
1.6 继承
①现状
hello依赖的Junit:4.0
helloFriend依赖的Junit:4.0
makeFriend依赖的Junit:4.9
由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。
②需求:统一管理各个模块工程中对Junit依赖的版本
③解决思路:将Junit依赖统一提取到父工程中,在子工程中声明Junit依赖时不指定版本,以父工程统一设定为准,同时也便于修改。
注意打包方式为pom
注意执行安装时,要先安装父工程make install
1.7 聚合
作用:一键安装各个模块工程
配置方式:在一个总的聚合工程中,
<!-- 配置聚合 -->
<modules>
<!-- 指定各个子工程的相对路径 -->
<module>../Hello</module>
<module>../HelloFriend</module>
<module>../MakeFriends</module>
</modules>
使用方式:
在聚合工程,pom.xml 右键—> run as —> 安装make install