文章目录
0、参考资料
1、Maven概述
Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。 Maven 这个单词的本意是:专家,内行。读音是['meɪv(ə)n]或['mevn]。
Maven 是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用, Maven 是一款在大型项目开发过程中不可或缺的重要工具。
Maven 可以整合多个项目之间的引用关系, 我们可以根据业务和分层需要任意拆分一个项目;
Maven 提供规范的管理各个常用 jar 包及其各个版本, 并且可以自动下载和引入项目中;
Maven 可以根据指定版本自动解决 jar 包版本兼容问题;
Maven 可以把 jar 包所依赖的其它 jar 包自动下载并引入项目。
类似自动化构建工具还有:Ant
,Maven
,Gradle
。
构建过程中的各个环节:清理
、编译
、测试
、报告
、打包
、安装
、部署
构建(build),是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。
构建过程的几个主要环节
①清理(clean
):删除以前的编译结果,为重新编译做好准备。
②编译(compile
):将Java源程序编译为字节码文件。
③测试(test
):针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告:在每一次测试后以标准的格式记录和展示测试结果。
⑤打包(package
):将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。 Java 工程对应 jar 包, Web
工程对应war包。
⑥安装(install
):在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
⑦部署(deploy
):将打包的结果部署到远程仓库或将war包部署到服务器上运行
2、Maven中的核心概念
2.1、Maven工程约定目录结构
说明:
-
Hello:根目录,也就是工程名
-
src: 源代码
-
main: 主程序
- java: 主程序的 java 源码
- resources: 主程序的配置文件
-
test:测试程序
- java:测试程序的 java 源码
- resources:测试程序的配置文件
2.2、Maven的生命周期
- 对项目的构建是建立在生命周期模型上的, 它明确定义项目生命周期各个阶段, 并且对于每一个阶段提供相对应的命令,对开发者而言仅仅需要掌握一小堆的命令就可以完成项目各个阶段的构建工作。
- 构建项目时按照生命周期顺序构建,每一个阶段都有特定的插件来完成。不论现在要执行生命周期中的哪个阶段,都是从这个生命周期的最初阶段开始的。
- 对于我们程序员而言,无论我们要进行哪个阶段的构建,直接执行相应的命令即可,无需担心它前边阶段是否构建, Maven 都会自动构建。这也就是 Maven 这种自动化构建工具给我们带来的好处。
2.3、Maven的常用命令
Maven 对所有的功能都提供相对应的命令,要想知道 maven 都有哪些命令,那要看 maven 有哪些功能。
一开始就跟大家说了, maven 三大功能: 管理依赖
、构建项目
、管理项目信息
。 管理依赖,只需要声明就可以自动到仓库下载;管理项目信息其实就是生成一个站点文档,一个命令就可以解决,最后再说;那 maven 功能的主体其实就是项目构建
。
Maven 提供一个项目构建的模型,把编译
、测试
、打包
、部署
等都对应成一个个的生命周期阶段, 并对每一个阶段提供相应的命令,程序员只需要掌握一小堆命令,就可以完成项目的构建过程。
mvn clean
清理(会删除原来编译和测试的目录,即target 目录
,但是已经 install 到仓库里的包不会删除)mvn compile
编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件)mvn test-compile
编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)mvn test
测试(会生成一个目录surefire-reports,保存测试结果)mvn package
打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包)mvn install
安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)mvn deploy
部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。还会自动把项目部署到 web 容器中)。
2.4、插件
maven 过程构建周期, 由 maven 的插件 plugin 来执行完成
官网插件说明: http://maven.apache.org/plugins/
3、Setting.xml
在Maven中存在一个配置文件,这个文件很重要:Setting.xml
- 一般需要配置本地仓库
- 镜像为了加速
4、POM文件
即 Project Object Model 项目对象模型。 Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中进行声明,以方便进行构建和描述, pom.xml
是 Maven
的灵魂。所以, maven 环境搭建好之后,所有的学习和操作都是关于 pom.xml
的。
基本信息 | |
---|---|
modelVersion | Maven 模型的版本,对于 Maven2 和 Maven3 来说,它只能是 4.0.0 |
groupId | 组织 id,一般是公司域名的倒写。 格式可以为:1. 域名倒写。 例如 com.baidu2. 域名倒写+项目名。例如 com.baidu.appolo |
artifactId | 项目名称,也是模块名称,对应 groupId 中 项目中的子项目。 |
version | 项目的版本号。如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOTversion 使用三位数字标识,例如 1.1.0 |
packaging | 项目打包的类型,可以使 jar、 war、 rar、 ear、 pom,默认是 jar |
依赖 | |
dependencies 和dependency | Maven 的一个重要作用就是管理 jar 包,为了一个项目可以构建或运行,项目中不可避免的,会依赖很多其他的 jar 包,在 Maven 中,这些 jar 就被称为依赖,使用标签 dependency 来配置。 而这种依赖的配置正是通过坐标来定位的,由此我们也不难看出, maven 把所有的 jar 包也都视为项目存在了。 |
配置属性 | |
properties | properties 是 用 来 定 义 一 些 配 置 属 性 的 , 例 如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。 |
构建 | |
build | build 表示与构建相关的配置, 例如设置编译插件的 jdk 版本 |
继承 | |
parent | 在 Maven 中,如果多个模块都需要声明相同的配置,例如: groupId、version、 有相同的依赖、或者相同的组件配置等, 也有类似 Java 的继承机制, 用 parent 声明要继承的父工程的 pom 配置。 |
聚合 | |
modules | 在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一个额外的模块,该模块打包方式为 pom,并且在其中使用 modules 聚合的其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有模块,叫 Maven 的聚合 |
5、Maven的依赖配置
6、Maven常用设置
6.1、全局变量(这个可以使用)