一、概述

本文将从约定配置、生命周期两个方面总结 Maven 这个 Java 包管理工具。

二、约定配置

目录 目的
${basedir} 存放 pom.xml 和所有的子目录
${basedir}/src/main/java 项目的源代码
${basedir}/src/main/resources 项目的资源,比如说property文件,springmvc.xml
${basedir}/src/main/webapp/WEB-INF web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面
${basedir}/target 打包输出目录
${basedir}/target/classes 编译输出目录
${basedir}/target/test-classes 测试编译输出目录
~/.m2/repository Maven默认的本地仓库目录位置

三、Maven 构建生命周期

3.1 生命周期

Maven 构建生命周期就是 Maven 将一个整体任务划分为一个个的阶段,类似于流程图,按顺序依次执行。也可以指定该任务执行到中间的某个阶段结束。

Maven的生命周期由一系列阶段(phase)构成。Maven 的内部有三个构建生命周期,分别是 clean, default, site。 生命周期的核心阶段如下所示:

3.2 构建阶段与插件目标

一个插件目标代表一个特定的任务(比构建阶段更为精细),这有助于项目的构建和管理。这些目标可能被绑定到多个阶段或者无绑定。不绑定到任何构建阶段的目标可以在构建生命周期之外通过直接调用执行。这些目标的执行顺序取决于调用目标和构建阶段的顺序。

例如,考虑下面的命令:

clean 和 pakage 是构建阶段,dependency:copy-dependencies 是目标

1
2
3
mvn clean dependency:copy-dependencies package

# 即 : mvn [phase] [plugin]:[goal]

而在具体 pom.xml 插件中定义阶段和目标是在execution中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
                <version>3.2.1</version>
				<executions>
					<execution>
						<phase>package</phase> <!----  绑定阶段  --->
						<goals>
							<goal>shade</goal>   <!----  绑定目标  --->
						</goals>
						<configuration>
                            ...
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

3.3 Maven 默认插件

已知 Maven 使用 plugin 来执行实际操作的,在默认情况下,Maven 会绑定以下几个插件来完成基本操作。

实际操作可以通过: mvn clean install走一遍查看运行日志。

plugin function life cycle phase
maven-clean-plugin 清理上一次执行创建的目标文件 clean
maven-resources-plugin 处理源资源文件和测试资源文件 resources,testResources
maven-compiler-plugin 编译源文件和测试源文件 compile,testCompile
maven-surefire-plugin 执行测试文件 test
maven-jar-plugin 创建 jar jar
maven-install-plugin 安装 jar,将创建生成的 jar 拷贝到 .m2/repository 下面 install
maven-deploy-plugin 发布 jar deploy