2.1 Maven介绍
Maven是Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)管理一个项目的构建、依赖、报告和文档等步骤
- 构建工具,实现自动化构建,跨平台,对外提供一致的操作接口
- 依赖管理工具和项目信息管理工具,还提供了中央仓库
- 于项目目录结构、测试用例命名方式等内容,提倡使用一个共同的标准规则
Maven会自动根据dependency中的依赖配置,在中央仓库下载相关依赖包到本地Maven库,本地Maven库默认是用户目录的.m2目录
Maven仓库:https://mvnrepository.com/
2.2 标准目录结构
目录 | 用途 |
${basedir} | 存放pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
${basedir}/src/test/java | 项目的测试类,比如说Junit代码 |
${basedir}/src/test/resources | 测试用的资源 |
${basedir}/src/main/webapp/WEB-INF | web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 |
${basedir}/target | 打包输出目录 |
${basedir}/target/classes | 编译输出目录 |
${basedir}/target/test-classes | 测试编译输出目录 |
Test.java | Maven只会自动运行符合该命名规则的测试类 |
~/.m2/repository | Maven默认的本地仓库目录位置 |
2.3 POM
POM( Project Object Model,项目对象模型 ) 是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等,Maven 会在当前目录中查找并读取POM文件,获取所需的配置信息,然后执行目标,POM 中可以指定以下配置
- 项目依赖
- 插件
- 执行目标
- 项目构建 profile
- 项目版本
- 项目开发者列表
- 相关邮件列表信息
父(Super)POM是 Maven 默认的 POM
- 所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)
- 包含了一些可以被继承的默认设置,可以用Show Effective POM看到最终有效的POM定义
例如在POM文件中定义继承Spring-boot-starter-parent
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
例如在插件中采用SpringBoot的插件来编译打包应用
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
2.4 Maven生命周期
三个标准生命周期
- clean:项目构建前的清理工作,删除前一次构建在target文件夹下生成 的各个Jar包等
- default:构建,包括项目的编译,测试,打包,安装,部署等等
- site:生成项目报告,发布站点,Maven可以根据pom所包含的信息 生成一个站点,方便团队交流和发布项目信息
2.5 Maven插件
Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。每个插件可以完成多个功能称为插件目标(Plugin Goal),Maven插件是阶段的内置绑定的
插件目标 | 描述 |
spring-boot:run | 运行Spring Boot应用 |
spring-boot:repackage | 重新打包jar/war包为可执行包 |
spring-boot:help | 展示spring-boot-maven-plugin的帮助信息 |
spring-boot:start | 启动Spring应用程序,和run目标不同,该目标不会阻塞,并且允许其他目标来操作应用程序 |
spring-boot:stop | 停止使用start目标启动的spring应用程序,通常在测试套件 完成后被调用 |
Clean生命周期
阶段 | 内置绑定的插件目标 |
clean | maven-clean-plugin:clean |
Default生命周期(当packaging的值是jar/war)
阶段 | 内置绑定的插件目标 |
process-resource | maven-resources-plugin:resources |
compiler | maven-compiler-plugin:compile |
process-test-resources | maven-resources-plugin:testResources |
test-compile | maven-compiler-plugin:testCompile |
test | maven-surefire-plugin:test |
package | maven-jar-plugin:jar/maven-war-plugin:war |
install | maven-install-plugin:install |
deploy | maven-deploy-plugin:deploy |
Default生命周期(当packaging的值是pom)
阶段 | 内置绑定的插件目标 |
install | maven-install-plugin:install |
deploy | maven-deploy-plugin:deploy |
site生命周期
阶段 | 内置绑定的插件目标 |
site | maven-site-plugin:site |
site-deploy | maven-site-plugin:deploy |