Apache Maven 一个由Java 语言编写的包管理工具。可以帮助我们管理,分析项目依赖。以及构建工程。
1 Maven 的安装
可以直接参考Apache Maven 安装 的指导,安装过程比较简单。首先要把Jdk 安装好。其次是以下几个步骤
- 下载,解压maven。
- 配置Maven环境变量。
- 输入 mvn -h 检查是否安装成功。如下所示,即表示安装成功。
2 Maven 命令
Maven通过命令驱动自身工作。
常用的Maven命令如下:
命令 | 说明 |
mvn clean | 清理Maven 项目。会删除目标路径(一般是target目录)Maven生成的打包文件,编译文件。 |
mvn package | 打包Maven项目,会生成jar 或者war文件。 |
mvn test | 执行test目录下的测试用例。 |
mvn deploy | 发布依赖到远端 |
mvn site | 生成项目相关的信息 |
mvn archetype | 创建Maven 项目 |
mvn tomcat:run | 运行在Tomcat容器 |
mvn install | 安装依赖 |
- mvn archetype 创建项目
archetype翻译过来就是典型,就是项目模版。
Maven 拥有众多类型的archetype
mvn archetype:create
执行mvn archetype:create 有以下三个参数
参数 | 说明 |
-DgroupId | 项目的包名,比如 com.main.test |
-DartifactId | 项目的名称,比如 MavenTest |
-DarchetypeArtifactId | 项目的模版名称, 比如上图的 maven-archetype-weapp |
mvn archetype:generate
mvn archetype:generate 是 mvn archetype:create 的便捷版本.执行后 只需要根据项目 来选择,最后即可生成Maven项目。
可以看到Maven 默认使用的archetype 是maven-archetype-quickstart。
接下来,我们使用我们创建的项目,来讲解Maven项目的构成。
3 Maven 项目构成
接下来再使用mvn archetype:generate创建一个Maven Web 项目。
可以看到,Maven 的标准项目中存在src/main/java和src/main/test文件夹。默认的web项目中是不存在的,但是我们依然可以通过手动创建的方式,为其创建这两个文件夹。
Maven 不仅仅是一个包管理工具,更是一个项目结构的规范标杆。遵守既定的标准,会使项目便于维护,降低开发成本。
Pom.xml
通过观察Maven的项目,会发现每一个项目中都存在一个pom.xml。这个xml 文件 其实就是Maven项目的配置文件。通过它 可以管理项目的依赖,依赖仓库,活动文件,构建,Maven模块的聚合,以及项目信息的配置等等。
接下来,我们分别讲解Pom 文件在Maven中的应用。
- 依赖配置
<dependencyManagement>
依赖dependencies,即依赖模块,内部由多个dependency,即依赖的具体内容。
dependency内部有groupId,artifactId,version ,scope组成了Maven的坐标,根据坐标可以在仓库中找到一个唯一的包。
对于 Scope 有必要做一下解释,
Scope 指定了依赖的 作用范围 ,默认是compile。并且具有传递性。
Scope 有以下选择test,compile,runntime,provided,system 五个。
Scope | 说明 |
test | 只有和test相关的编译和运行才参与进来。 |
compile | 完整的参与maven 的生命周期。 |
runtime | 跳过了compile阶段。 |
provided | 没有这个包的时候,才参与进来。跳过了package阶段。 |
system | 指示Maven 只在systemPath指定的路径下寻找包。 |
在dependencies的上层还有一个标签dependencyManagement。一般是聚合模块的时候 在跟模块下使用,其他的子模块在引入包的时候都是引入的根模块的依赖。只有根模块不存的时候 才会去自己去根据坐标寻找依赖。
2. 活动文件
<profiles>
活动文件的主要作用是 在执行mav package 的时候通过 -P 参数来指定活动的配置。
mav package -P dev
执行后 就会选择 dev节点下的配置,从dev中过滤出dev.properties来使用。
Maven的标签都可以在profile内部 复写。
3. 构建
<build>
build节点内主要是可以指定resources资源 和 plugin。比如compiler 和 war插件,可以自己选择指定的插件,如果你需要打包jar 就需要jar打包插件。同样的如果使用了pluginManagement那么子模块会跟随根模块使用一样的插件。
mvn package
执行Maven 的构建,并按照<packaging>war</packaging>所指定的方式进行打包。
Maven 会帮我们执行clean,resource,compile,test,war这个几个插件的工作。最后生成war包。
4 Maven的生命周期和基本原理
- Maven的生命周期
Maven 有三个生命周期clean、default 和 site。
生命周期 | 说明 |
clean | 执行清理相关的时候会触发该生命周期。比如mvn clean |
default | 构建项目 |
site | 建立项目站点 |
clean 周期组成:
阶段 | 说明 |
pre-clean | 清理前 |
clean | 执行清理 |
post-clean | 清理后 |
default 周期组成:
阶段 | 说明 |
validate | 验证项目是否村存在 mvn validate 触发 |
initialize | 初始化阶段 |
compile | 编译项目中的源代码 mvn compile 触发 |
test-compile | 编译项目中的测试源代码 mvn test 触发 |
test | 执行test用例 mvn test 触发 |
package | 编译资源打包,jar或者 war mvn package 触发 |
verify | 检验包是否完好 mvn varify 触发 |
install | 安装打包好的资源到本地仓库 mvn install 触发 |
deploy | 发布包到远程仓库。mvn deploy 触发 |
以上阶段自上而下,比如执行mvn validate就只会执行validate阶段。而执行mvn deploy 会执行
validate到deploy的所有阶段。
site 周期组成:
阶段 | 说明 |
pre-site | 生成站点文档前 |
site | 生成站点文档 |
post-site | 生成站点文档后 |
site-deploy | 发布站点 |
2. Maven的基本原理
我们借助IDEA来观察Maven,发现他只有三个组成部分。
- Lifecycle
- Plugins
- Dependencies
对于Lifecycle(生命周期)上边已经展示过了。而Plugins正是对应了,在不同的生命周期执行具体动作的插件。Dependencies 就是项目的依赖包。
也就是说 我们在执行mvn clean 这个命令的时候,触发了Maven生命周期的clean周期,在这个周期内clean插件来帮我们执行了清理动作。
Maven 是一个插件执行框架。通过插件在不同的时期,做不同的事情。我们把不同的时期,总结为Maven的生命周期,而做不同事情的本体就是插件。
书写尚未完成,将持续更新。