一、Maven项目目录结构
Maven约定了一套目录结构,如下图:
二、Maven仓库
Maven仓库是一个专门存放项目中依赖的第三方库的位置。Maven仓库分为本地仓库和远程仓库。
2.1、本地仓库
本地仓库相当于一个缓存,是一个文件夹,这个文件夹路径可以设置。项目工程中需要某个jar包,Maven第一次会从远程仓库中下载并保存在本地仓库中,第二次就不需要下载可以直接使用。
2.2、远程仓库
远程仓库分为私服和中央仓库。中央仓库的jar包由Maven团队维护,存放了全世界大多数流行的开源软件jar包,是Maven默认的远程仓库。Maven仓库查看地址:https://search.maven.org/#browse
私服:一种特殊的远程仓库。是一个在局域网内架设的私有仓库服务器,用其来代理所有外部远程仓库。内部的项目也能部署到私服上供其他项目使用。
2.3、配置本地仓库
在Maven安装目录的conf目录下的文件 setting.xml中添加如下内容:
<!--配置本地仓库-->
<localRepository>D:\.m2\repository</localRepository>
2.4、配置远程仓库镜像
由于中央仓库在国外,下载速度过慢,我们可以使用国内阿里云的Maven仓库作为中央仓库镜像。
修改Maven安装目录的conf目录下的文件 setting.xml内容:
<mirror>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
标签的含义:
标签 | 含义 |
id | 当前镜像唯一标识 |
mirrorOf | 将哪个远程仓库当做中央仓库镜像,中央仓库的id是central,* 代表全部 |
name | 为当前中央仓库镜像取一个名字 |
url | 阿里云远程仓库地址 |
三、Maven的核心文件pom.xml
3.1、pom
POM(project object model)项目对象模型:Maven工程的基本工作单元,是一个xml文件。描述了项目基本信息:描述项目如何构建,声明项目依赖。
执行目标或任务时,Maven会在当前目录查找pom。它读取pom,获取配置信息,然后执行目标。
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<!-- Maven模型版本-->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,Maven最终将该项目打包的jar包本地路径:/com/jsonLiu/test-->
<groupId>com.jsonliu.test</groupId>
<!-- 项目的唯一ID,一个groupId项目可能有多个项目,靠artifactId区分-->
<artifactId>testMaven</artifactId>
<!-- 当前项目版本号:每个工程发布后可以发布多个版本,依赖时可以调取不同版本,使用不同的版本号就可以。
snapshot为快照版本即非正式版本,release为正式发布版本-->
<version>1.0-SNAPSHOT</version>
<!-- 名称:可省略,常用于Maven生成的文档-->
<name>testMaven</name>
<!-- 项目描述:可省略,常用于Maven生成的文档-->
<description>Maven test project</description>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<!-- 项目依赖构件配置,配置项目依赖构件的坐标-->
<dependencies>
<!-- 依赖设置,可以有多个dependency节点-->
<dependency>
<!-- 依赖组织名称-->
<groupId>junit</groupId>
<!-- 依赖项目名称-->
<artifactId>junit</artifactId>
<!-- 依赖版本名称-->
<version>4.12</version>
<!-- 依赖范围:test包下依赖该设置-->
<scope>test</scope>
</dependency>
</dependencies>
<!-- 项目构建配置,配置编译、运行插件-->
<build>
</build>
</project>
3.2、Maven坐标
Maven中的坐标就是为了定位一个唯一确定的jar包。
Maven坐标的组成:
<!-- 依赖设置,可以有多个dependency节点-->
<dependency>
<!-- 依赖组织名称-->
<groupId>junit</groupId>
<!-- 依赖项目名称-->
<artifactId>junit</artifactId>
<!-- 依赖版本名称-->
<version>4.12</version>
<!-- 依赖范围:test包下依赖该设置-->
<scope>test</scope>
</dependency>
标签 | 含义 |
groupId | 定义当前Maven项目组织名称 |
artifactId | 定义实际项目名称 |
version | 当前项目的当前版本或所依赖的jar包版本 |
scope | 依赖使用范围 |
四、Maven生命周期
Maven的生命周期对所有的构建过程进行抽象和统一。包括:
- 清理
- 初始化
- 编译
- 打包
- 测试
- 部署
4.1、Maven三大生命周期
Maven拥有三套相互独立的生命周期:clean、default、site
clean Lifecycle:在进行真正构建之前进行一些清理工作。mvn clean
default Lifecycle:构建的核心部分,包括编译、测试、打包、部署等等
site Lifecycle:生成项目报告,站点,发布站点。
4.2、clean
clean的目的是清理项目。
每套生命周期都有一组阶段(Phase)组成,我们在命令行输入的命令对应一个特定的阶段。比如:mvn clean,是Clean生命周期的一个阶段。
Clean包含三个阶段:
- pre-clean:执行一些清理前需要完成的工作
- clean:清理上一次构建生成的文件,比如:class文件等
- post-clean:执行一些清理后需要完成的工作
4.3、default生命周期
所有生命周期中最核心的部分,绝大部分工作都在这个生命周期。
- generate-resources:产生主代码中的资源在classpath中的包
- process-resources:复制并处理资源文件至目标目录,准备打包。
- compile:编译项目的主源码,一般来说:编译/src/main/java目录下的java文件至项目输出的主classpath目录中。
- test-compile:编译项目的测试代码,编译/src/test/java目录下的java文件至项目输出的测试classpath目录下。
- test:使用单元测试框架运行测试,测试代码不会被打包或部署
- package:打包成可发布的格式
- install:将包安装到Maven本地仓库,供本地其他Maven项目使用
- deploy:将最终包复制到远程仓库
在运行任何一个阶段时,它前面的阶段都会被执行,这也就是我们运行mvn install时,代码会被编译、测试、打包。此外,Maven的插件机制完全依赖Maven的生命周期。
4.4、site生命周期
目的:建立和发布项目站点
- pre-site:执行一些在生成站点之前需要完成的工作
- site:生成项目站点文档
- post-site:执行一些在生成站点之后需要完成的工作
- site-depoly:将生成的站点项目发布到服务器