Maven的概念与作用
传统项目管理的缺点
- jar包不统一,jar包不兼容
- 工程升级维护过程操作繁琐
Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
作用
项目构建:提供标准的、跨平台的自动化项目构建方式
依赖管理:方便快捷的项目管理依赖的资源(jar包),避免资源间的版本冲突问题
统一开发结构:提供标准的、统一的项目结构
Maven环境配置
本机Maven路径:D:\apache-maven-3.6.3
依赖Java,需要配置JAVA_HOME
设置Maven自身的运行环境,需要配置MAVEN_HOME
环境测试结果,命令提示符——mvn
仓库
用于存储资源,包含各种jar包
分类
本地仓库:自己电脑上存储资源带仓库,连接远程仓库获取资源
远程仓库:非本机电脑上的仓库,为本地仓库提供资源
- 中央仓库:Maven团队维护,存储所有开源资源的仓库
- 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
配置本地仓库,默认放在用户名主目录下,可以自定义
<localRepository>D:/maven_repo</localRepository>
配置下载镜像
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
Maven项目构建指令
mvn compile //编译项目
mvn clean //清除编译
mvn test //测试项目
mvn package //打包项目
mvn install //安装到本地仓库
依赖(dependency)
设置当前项目所依赖的所需的jar,一个项目可以设置多个依赖
依赖管理
pom文件常见内容注析
<!--指定的pom的模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--组织id,域名反写作为坐标-->
<groupId>com.gakki</groupId>
<!--项目id,一般为项目名称-->
<artifactId>note</artifactId>
<!--版本号,release完成版,snapshot开发版-->
<version>1.0-SNAPSHOT</version>
<!--打包方式-->
<packaging>war</packaging>
<!--设置当前工程所有的依赖-->
<dependencies>
<!--具体的依赖 -->
<dependency>
<!--构建插件-->
<build>
<!--设置插件-->
<plugins>
<!--具体插件配置-->
<plugin>
依赖传递
在当前项目中通过依赖配置建立的依赖关系称为直接依赖
当前项目依赖的资源,又依赖了其他资源,则当前项目又间接依赖了其他资源
冲突问题
- 路径优先:当依赖中出现相同资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源出现在相同层级时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本时,后配置的覆盖先配置的
可选依赖
对外隐藏所依赖的资源——不透明
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<!--依赖可选-->
<optional>true</optional>
</dependency>
排除依赖
主动断开依赖的资源,被排除的资源无需指定版本——不需要
<exclusions>
<exclusion>
<groupId>com.gakki</groupId>
<artifactId>note</artifactId>
</exclusion>
</exclusions>
依赖范围
依赖的jar默认情况下可以在任何地方使用,可以通过scope标签进行设置
作用范围
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹内)
- 是否参与打包(package指令范围内)
生命周期
Maven对项目构建的生命周期划分为3套
clean:清理工作
default:核心工作,编译、测试、打包、部署等
site:产生报告,发布站点等
插件
- 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
- 默认Maven在各个生命周期上绑定有预设的功能
- 通过插件可以自定义其他功能