Maven概念
什么是Maven?
- Maven 翻译过来就是专家
- 官网 http://maven.apache.org/
- Maven使用POM (Project Object Model)项目对象模型,就是通过一段描述信息管理项目的构建,描述信息为一个xml类型的文件,该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
- Maven的用途通常有:构建项目,文档生成,报告,依赖管理,SCMS,发布项目,分发项目,邮件管理
- 主要思想:约定大于配置
- 其实就是一个词:标准。规范了Java项目开发的一个标准,标准很重要,每个公司都有自己的标准,那就乱套了
开始使用Maven的优势
- 项目设置遵循统一的规则。
- 任意工程中共享。
- 依赖管理包括自动更新。
- 一个庞大且不断增长的库。
- 可扩展,能够轻松编写 Java 或脚本语言的插件。
- 只需很少或不需要额外配置即可即时访问新功能。
- 基于模型的构建 − Maven能够将任意数量的项目构建到预定义的输出类型中,如 JAR,WAR 或基于项目元数据的分发,而不需要在大多数情况下执行任何脚本。
- 项目信息的一致性站点 − 使用与构建过程相同的元数据,Maven 能够生成一个网站或PDF,包括您要添加的任何文档,并添加到关于项目开发状态的标准报告中。
- 发布管理和发布发布 − Maven 将不需要额外的配置,就可以与源代码管理系统(如 Subversion 或 Git)集成,并可以基于某个标签管理项目的发布。它也可以将其发布到分发位置供其他项目使用。Maven能够发布单独的输出,如 JAR,包含其他依赖和文档的归档,或者作为源代码发布。
- 向后兼容性 − 您可以很轻松的从旧版本 Maven 的多个模块移植到 Maven 3 中。
- 子项目使用父项目依赖时,正常情况子项目应该继承父项目依赖,无需使用版本号,
- 并行构建 − 编译的速度能普遍提高20 - 50 %。
- 更好的错误报告 − Maven 改进了错误报告,它为您提供了 Maven wiki 页面的链接,您可以点击链接查看错误的完整描述。
一、Maven两大核心
依赖管理:对jar包管理过程
项目构建:项目在编码完成后,对项目进行编译、测试、打包、部署一系列的操作都通过命令来实现。
二、配置maven本地仓库
在maven的 conf 目录下的 settings.xml 文件中配置本地仓库
三、Maven项目标准目录结构
-- 项目目录
--src 项目中的所有资源
--main 存放开发代码和资源
--java 项目的java源代码
--resources 项目的资源文件,源代码之外的其他文件
--webapp 项目(WEB-INF 下的web.xml)和页面等其他文件
--test 存放测试代码和资源
--java 项目的测试类和测试代码
--resources 项目的测试资源
--target 打包输出目录
--classes 编译输出目录
--test-classes 测试代码编译输出目录
--generated-sources 自动生成的资源输出目录
--generated-test-sources 测试资源输出目录
--pom.xml 文档对象模型的描述文件
四、Maven构建的生命周期
1.验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的
2.编译 compile 执行编译 源代码编译在此阶段完成(将项目中 .java 文件编译为 .class 文件)
3.测试 Test 测试 使用适当的单元测试框架(例如JUnit)运行测试。
将项目根目录下 src/test/java 目录下的单元测试类都会执行,单元测试类名有要求:xxxTest.java
4.打包 package 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包,将项目打包,打包项目根目录下target目录。
5.检查 verify 检查 对集成测试的结果进行检查,以保证质量达标
6.安装 install 安装 安装打包的项目到本地仓库,以供其他项目使用
7.部署 deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程
五、Maven的三个标准生命周期
- clean 项目清理
- default或build 项目部署
- site 项目站点文档构建
三套生命周期,每一套生命周期相互独立,互不影响。在一套生命周期内,执行后面的命令前面操作会自动执行。
CleanLifeCycle:清理生命周期 clean
当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下阶段:
pre-clean:执行一些需要在clean之前完成的工作
clean:移除所有上一次构建生成的文件
post-clean:执行一些需要在clean之后立刻完成的工作
mvn clean 中的 clean 就是上面的 clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。
defaultCycle: 默认生命周期
这是 Maven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段:
- validate 检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。
- initialize 初始化构建状态,例如设置属性。
- generate-sources 生成编译阶段需要包含的任何源码文件。
- process-sources 处理源代码,例如,过滤任何值(filter any value)。
- generate-resources 生成工程包中需要包含的资源文件。
- process-resources 拷贝和处理资源文件到目的目录中,为打包阶段做准备。
- compile 编译工程源码。
- process-classes 处理编译生成的文件,例如 Java Class 字节码的加强和优化。
- generate-test-sources 生成编译阶段需要包含的任何测试源代码。
- process-test-sources 处理测试源代码,例如,过滤任何值(filter any values)。
- test-compile 编译测试源代码到测试目的目录。
- process-test-classes 处理测试代码文件编译后生成的文件。
- test 使用适当的单元测试框架(例如JUnit)运行测试。
- prepare-package 在真正打包之前,为准备打包执行任何必要的操作。
package 获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件。 - pre-integration-test 在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量。
- integration-test 处理和部署必须的工程包到集成测试能够运行的环境中。
- post-integration-test 在集成测试被执行后执行必要的操作。例如,清理环境。
- verify 运行检查操作来验证工程包是有效的,并满足质量要求。
- install 安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。
- deploy 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。
该生命周期主要用的命令:
compile:编译
test:单元测试
package:打包
install:安装
deploy:上传到私服
siteLifeCycle:站点生命周期 site
Maven Site 插件一般用来创建新的报告文档、部署站点等。
- pre-site:执行一些需要在生成站点文档之前完成的工作
- site:生成项目的站点文档
- post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
- site-deploy:将生成的站点文档部署到特定的服务器上
这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。 在下面的例子中,我们将 maven-antrun-plugin:run 目标添加到 Site 生命周期的所有阶段中。这样我们可以显示生命周期的所有文本信息。