maven学习目录
1. maven
1-1. maven介绍
Maven是一个项目管理工具,它的作用就是管理项目,主要体现在两个方面:依赖管理
和一键构建
。
- 依赖管理:对 jar 包的管理方式,maven 会将所有需要的 jar 包放在本地仓库,每个项目通过配置文件引入自己所需要的
- 一键构建:一个命令就可以完成一个项目构建过程
依赖管理
jar包在maven本地仓库中是按照什么结构存放的?
项目应该怎么获取对应的 jar 包 ?
本地仓库没有 jar 包从哪里下载 ?
一键构建
- 项目构建:一个项目从源代码完成的那一刻起后面的流程(清理 编译 测试 打包 安装 部署)就称为项目的构建过程
- 一键构建:上面的所有过程都对应着一个命令
1-2. maven安装
下载maven
安装maven
将压缩包解压到一个没有中文,没有空格的目录
目录结构介绍
配置maven
① 配置本地仓库的目录位置
② 配置阿里云镜像
默认情况下,当本地没有需要的依赖的时候,maven会从apache的中央仓库下载,速度非常慢,在这里配置成阿里云的仓库地址
<mirrors>
<!--阿里镜像-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
配置环境变量
测试
启动cmd, 在电脑的任意位置使用mvn -version
进行测试
1-3. 标准结构
pom.xml------------------------------------------------------------这是maven要使用的当前项目的配置文件
target ------------------------------------------------------------这是存储项目构建过程中产生的文件的(这个文件如果不存在会自动创建)
src ------------------------------------------------------------这是项目的资源文件
|--main -------------------------------------------------------- 这是当前项目的正式文件
|-- java-----------------------------------------------存放的是正式的java文件
|-- resources------------------------------------------存放的是正式的配置文件
|--test -------------------------------------------------------- 这是当前项目的测试文件
|-- java-----------------------------------------------存放的是测试的java文件
|-- resources------------------------------------------存放的是测试的配置文件(这个目录一般是没有的)
1-4. 常见命令
maven的项目构建过程是基于命令的,下面来看一些常见的命令
clean
清理命令,执行clean会删除target目录, 即清理掉上一次项目构建产生的文件
compile
编译命令,作用是将 src/main/java
下的文件 ( 正式的java文件 )编译为class文件输出到 target
目录下
test
测试命令,作用是执行 src/test/java
下的测试类,并编译为 class 文件输出到 target 目录下
package
打包命令,打的是所有的正式代码 (src/main
) 对于 java 工程执行 package 打成 jar
包,对于 web 工程打成 war
包
install
安装命令,将打好 jar 包或者 war 包安装到本地maven仓库
deploy
部署命令,将打好的jar包或war包部署到私服中
总结
- clean:删除target目录
- compile:将正式的java代码进行编译(不包括test),生成class文件放到target目录中
- test:将test代码进行编译(不包括java),生成class文件放到target目录中
- package:将正式的java代码打包成jar包或war包
- install:将打好jar包或者war包安装到本地maven仓库
- deploy:将打好jar包或者war包安装到私服中
2. maven工程
本章节介绍如何在idea中配置使用maven软件
2-1. 配置环境
在主界面配置之后,其他项目再也不用配置了
2-2. 创建工程
编写项目标识
2-3. 依赖范围
很多情况下,我们需要精确控制一个依赖在哪个过程中生效,为了实现这个功能,Maven为每个依赖提供了作用范围,即:依赖范围。
maven支持的依赖范围主要有下面几种:
compile: 默认依赖范围,作用域在编译、测试、运行时都有效。
test: 作用域在测试时有效,编译和运行时不需要。
provided:作用域在编译、测试时有,运行时不需要。
runtime: 作用域在测试、运行时有效,编译时不需要。
2.4 maven的主要标签含义
maven的主要标签
groupId 公司(com.itheima)
artifactId 项目
version 版本号
SNAPSHOT 快照 测试
RELEASE 发行
packaging
jar 普通java工程
war web工程
pom 父工程
3. 分模块开发
3-1. 拆分与聚合的思想
拆分 :将原来的一个项目拆分成一个个小的模块, 每个模块都有自己的坐标, 当其它项目需要本模块的功能时, 只需要按照坐标引入本模块就可以了
聚合: 通过坐标的形式,将各个模块组装在一起,完成一个项目的功能
3-2. 父子工程搭建
创建父工程
创建dao模块
创建service模块
创建web模块
建立依赖关系
3-3. 两套关系梳理
在上面的工程中, 存在两套关系
- 父子工程之间: 继承关系, 子工程可以使用父工程中的jar包
- 模块工程之间: 默认是没有任何关系的,但是可以通过依赖建立两者之间的关系,而且这个依赖关系是可以传递的
web---->service----->dao
web---->service service----->dao 直接依赖
web---->dao 间接依赖
3-4. 依赖冲突
在依赖的传递过程中,很容易出现同一jar包的版本冲突问题,这个就称为依赖冲突
第一声明优先原则
在pom文件定义依赖,先声明的依赖为准。
路径近者优先原则
从依赖程序开始算起,到被依赖的程序,以路径短的为准。
依赖排除
依赖排除就是在依赖引入的过程中,通过exclusions
标签排掉指定的跟随依赖
版本锁定
面对众多的依赖,有一种方法不用考虑依赖路径、声明优先等因素,可以采用直接锁定版本的方法确定依赖构件的版本
版本锁定后,系统会以锁定的版本的为准添加到工程中,此方法在企业开发中常用。