Maven简介
Maven本质是项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。
POM(Project Object Model)
Maven作用
项目构建:提供标准的、跨平台的自动化项目构建方式
依赖管理:方便快捷的管理依赖的资源包,避免资源之间的版本冲突问题
统一开发结构:提供标准的、统一的项目结构
Maven基础概念
仓库(包括本地仓库和远程仓库):用于储存资源,包括各种jar包。
本地仓库:位于本地,连接远程仓库获取资源。
远程仓库(包括中央仓库和私服):为本地仓库提供资源
私服作用:保护具有版权的资源,包括购买和自主研发的jar(中央仓库为开源)、只在一定范围内共享。
坐标:描述仓库中资源的位置
坐标组成
groupId:定义当前Maven项目隶属组织名称(通常是域名反写)
artifactId:定义当前Maven项目名称(通常是模块名称)
version:定义当前项目版本号
packaging:定义项目的打包方式
坐标作用
使用唯一标识,定位资源位置
做一个Maven项目吧(手工制作)
Maven工程目录结构
Maven项目构建命令
mvn compile //编译
mvn clenn //清理
mvn test //测试
mvn package //打包
mvn install //安装到本地仓库
使用插件创建工程
代码自己百度吧qwq
再做一个Maven项目吧(IDER生成)
遇到的问题
1.导入的插件一直不自动下载
推测可能是因为在同一目录下新建两个Maven项目原因
新建文件夹重新创建Maven项目—>成功
使用模板创建Java和Web工程
在新建中勾选使用模板,并选择quickstart和xxx-webapp
运行插件
<build>
<plugins>
<plugin>
<groupID>xxx</groupId>
<artifactId>xxxx</artifactId>
<version>xxx</version>
...
</plugin>
<plugins>
</build>
在运行插件时遇到问题:
1.显示默认端口一直被占用
重启IDEA后发现可用
推断是之前测试时的进程未关闭
、
依赖管理
依赖配置
添加依赖
<dependencise>
</dependency>
<groupId>xxx</groupId>
<artifactId>xxxx</artifactId>
<version>xxx</version>
</dependency>
</dependencise>
依赖传递
直接依赖:在当前项目通过配置建立
间接依赖:资源间接依赖(依赖的依赖)
冲突问题
路径优先:层级越深,优先度越低
声明优先:在同级时,按配置顺序
特殊优先:后配置的覆盖先配置的
可选依赖
<optional>true</optional>
排除依赖
<dependency>
<exclusion>
xxx
xxx
xxx
</exclusion>
</dependency>
依赖范围
主程序范围
测试程序范围
是否参与打包
scope | 主代码 | 测试代码 | 打包 |
---|---|---|---|
compile | √ | √ | √ |
test | √ | ||
provided | √ | √ | |
runtime | √ |
<dependency>
<scope> xxx </scope>
</dependency>
依赖范围的传递性
间接依赖 | compile | text | provided | runtime |
---|---|---|---|---|
compile | compile | text | provided | runtime |
test | ||||
provided | ||||
runtime | runtime | text | provided | runtime |
声明周期与插件
项目构建生命周期
Maven构建生命周期描述一次构建过程经历了多少个事件
划分
clean:清理工作
default:核心工作,编译测试打包部署等
site:产生报告,发布站点
<build>
<plugins>
<plugin>
<groupID>xxx</groupId>
<artifactId>xxxx</artifactId>
<version>xxx</version>
<execution>
<goals>
<goal>xxx</goal>
</goals>
</execution>
...
</plugin>
<plugins>
</build>
Maven高级
聚合
作用
用于快速构建maven工程,一次构建多个项目模块。
制作方式
创建一个空模块,打包类型定位为pom
定义当前模块进行构建操作时关联的其他模块名称
<modules>
<module></module>
<module></module>
...
...
</modules>
继承
作用
通过继承可以实现在子工程中沿用夫工程中的配置
maven中的继承与java中的继承相似,在子工程中配置继承关系。
制作方式
在子工程中声明其父工程坐标与对应的位置
<parnt>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version>
<relativePath>../xxx.pom.xml</relativePath>
</parnt>
在父工程中定义依赖管理
在子工程中定义依赖关系,无需声明依赖版本,参照父工程
继承的资源
属性
属性类别:自定义属性
作用
等同于自动变量,方便统一维护
<!--定义自定义属性-->
<properties>
<spring.version>5.1.9RELEASE</spring.version>
<junit.version>4.12</junit.version>
</properties>
<!--调用格式-->
<dependency>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>${spring.version}</version>
</dependency>
多环境配置
加载指定环境
mvn 指令 -p 环境定义id
私服
仓库分离
宿主仓库hosted
保存无法从重要仓库获取的资源
自主研发
第三方非开源项目
代理仓库proxy
代理远程仓库,通过nexus访问其他公共仓库
仓库组froup
将若干个仓库组成一个群组
仓库组不能保存配置,属于设计型仓库
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~