1.1 简介
概念:Maven 的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POW);
- Maven是用 Java 语言编写的。他管理的东西统统以面向对象的形式进行设计,最终他把一个项目看成一个对象,而这个对象叫做POM(project object model),即项目对象模型;
- Maven 的作用有三个:
- 项目构建:提供标准的,跨平台的自动化构建项目的方式;
- 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题;
- 统一开发结构:提供标准的,统一的项目开发结构;
1.2 仓库
概念:Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库,用于存储各种资源,包含各种 jar 包;
Maven 仓库有三种类型:
- 本地仓库:本地仓库是自己电脑上存储资源的仓库,在第一次执行 maven 命令的时候被创建,Maven 所需要的构建是直接从本地仓库进行获取的,如果本地仓库没有,它会连接远程仓库获取资源下载至本地仓库;
- 中央仓库:中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库,中央仓库包含了绝大多数的开源 Java 构件(不能存储具有版权的资源),由 Maven 团队维护,需要网络才能访问;
- 私服: 部门或公司范围内存储资源的仓库,用于保存购买的、自主研发的 jar ,仅对内部开放,不对外部开放;
1.3 坐标
概念:Maven 坐标用于描述仓库中资源的位置;
组成:
- 组织 ID ( groupId ):定义当前 Maven 项目隶属组织名称(通常是域名反写,例如:org.mybatis );
- 项目 ID ( artifactId ):定义当前 Maven 项目名称;
- 版本号(version):定义当前项目版本号;
作用:坐标是唯一标识,用于唯一位置定位;
资源坐标查询网站:https://mvnrepository.com/
1.4 基本项目构建命令
- Maven 构建命令使用 mvn 开头,后面添加功能参数,可以用空格分隔一次性执行多个命令:
//编译 mvn compile //清理 mvn clean //测试 mvn test //打包 mvn package //安装到本地仓库 mvn install
1.5 pom 文件
常用标签:
- dependencies:设置当前项目所依赖的所有 jar;
- dependency:设置具体的依赖;
- optional:可选依赖;
- exclusions:排除依赖;
- scope:依赖范围;
- groupId:所属的项目包;
- artifactId:所属项目 id ;
- packaging:打包格式( java 项目为 jar ,web 项目为 war );
- version:版本号;
- build:配置;
- plugins:设置当前项目所依赖的所有插件;
- plugin:设置具体的插件;
- configuration:设置当前插件的配置、构造;
- port:端口号;
- path:路径;
示例:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <!-- 当前 pom 版本号 --> <modelVersion>4.0.0</modelVersion> <!-- 项目包名 --> <groupId>com.caterpillar</groupId> <!-- 项目名称 --> <artifactId>web01</artifactId> <!-- 打包格式 --> <packaging>war</packaging> <!-- 项目版本号 --> <version>1.0-SNAPSHOT</version> <name>web01 Maven Webapp</name> <url>http://maven.apache.org</url> <!-- 所有依赖 --> <dependencies> <!-- 具体依赖 --> <dependency> <!-- 依赖包名 --> <groupId>junit</groupId> <!-- 依赖名称 --> <artifactId>junit</artifactId> <!-- 依赖版本 --> <version>4.12</version> <!-- 可选依赖 --> <optional>true</optional> <!-- 依赖范围 --> <scope>test</scope> </dependency> <dependency> <groupId>com.caterpillar</groupId> <artifactId>java01</artifactId> <version>1.0-SNAPSHOT</version> <!-- 所有需去除依赖 --> <exclusions> <!-- 具体需去除依赖 --> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <!-- 配置 --> <build> <!-- 所有插件 --> <plugins> <!-- 具体插件 --> <plugin> <!-- 插件包名 --> <groupId>org.apache.tomcat.maven</groupId> <!-- 插件名称 --> <artifactId>tomcat7-maven-plugin</artifactId> <!-- 插件版本 --> <version>2.1</version> <!-- 构造 --> <configuration> <!-- 端口 --> <port>80</port> <!-- 路径 --> <path>/</path> </configuration> </plugin> </plugins> </build> </project>
依赖:
- 传递性:
- 在当前项目中通过 pom 文件建立的依赖关系叫做直接依赖;
- 在当前项目的依赖中依赖其他项目,会继承被依赖项目的依赖;
- 依赖传递冲突问题:
在依赖传递的情况下,出现依赖同一个名称但实际不为同一资源时称为依赖传递冲突问题;
依赖的优先级:
- 路径优先:层级越深,优先级越低,层级越浅优先级越高;
- 声明优先:配置顺序靠前的覆盖配置顺序靠后的;
- 特殊优先:为相同资源的不同版本情况下后配置的覆盖先配置的;
- 依赖范围
依赖的 jar 默认情况下可以在任何情况下使用,可以使用 scope 标签设定其作用范围;
scope | 主代码 | 测试代码 | 打包 |
---|---|---|---|
compile(默认) | 可用 | 可用 | 可用 |
test | 不可用 | 可用 | 不可用 |
provided | 可用 | 可用 | 不可用 |
runtime | 不可用 | 不可用 | 可用 |
1.6 生命周期
maven 对项目构建的生命周期分为 3 套:
- clean:清理工作
- pre-clean:执行一些需要在 clean 之前完成的工作;
- clean:移除上一次构建所生成的文件;
- post-clean:执行一些需要在 clean 之后执行的工作;
- defaule:核心工作
主要有:
- compile:编译
- test-compile:编译测试源码
- test:测试
- package:打包
- install:安装
- site:产生报告
- pre-site:执行一些要在生成站点文档之前完成的工作;
- site:生成项目的站点文档;
- post-site:执行一些在站点文档之后完成的工作,并且为部署做准备;
- site-deploy:将生成的站点文档部署到特定的服务器上;