(五)Maven基本概念

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 生命周期的所有阶段中。这样我们可以显示生命周期的所有文本信息。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值