美文网首页
Maven学习总结

Maven学习总结

作者: 程守正 | 来源:发表于2017-03-29 20:29 被阅读0次

    Maven的定义:
    Apache Maven 是一套软件工程管理和整合工具。基于工程对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建、报告和文档。

    Maven能做什么?
    构建
    文档生成
    报告
    依赖
    SCMs
    发布
    分发
    邮件列表

    主要是能简化工程的构建过程,使其标准化。

    POM
    是一个xml文件,包含了工程和各种配置细节的信息。必须包含project元素和三个必须的字段:groupId, artifactId,version。通过这三个标识在中央仓库中确定位置。
    节点
    描述

    groupId
    这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。公司名或组织名

    artifactId
    这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。项目名或项目名-子项目名

    version
    这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如: com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1.

    查看 Super POM(父POM)默认配置的一个简单方法是执行以下命令:
    mvn help:effective-pom

    构建生命周期
    Maven有三个标准的生命周期
    clean:用于删除构建目录。
    default(or build):有编译,测试,打包,部署等等操作都是在这个一个阶段进行。
    site:一般用来创建新的报告文档、部署站点。
    1.clean 包含以下阶段:
    pre-clean
    clean
    post-clean

    2.default(or build)有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
    拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。

    1. site有以下阶段:
      pre-site
      site
      post-site
      site-deploy

    构建配置文件
    Profile 在 pom.xml 中使用 activeProfiles / profiles 元素指定,并且可以用很多方式触发。Profile 在构建时修改 POM,可以为不同的环境定制构建过程,比如开发环境,测试环境,产品环境。
    Profile 主要有三种类型:
    类型
    在哪里定义

    Per Project
    定义在工程 POM 文件 pom.xml 中

    Per User
    定义在 Maven 设置 xml 文件中 (%USER_HOME%/.m2/settings.xml)

    Global
    定义在 Maven 全局配置 xml 文件中 (%M2_HOME%/conf/settings.xml)

    Profile 有以下几种方式激活:
    显式使用命令控制台输入
    通过 maven 设置
    基于环境变量(用户 / 系统变量)
    操作系统配置(例如,Windows family)
    现存 / 缺失 文件具体怎么激活还是需要项目实战才会有深刻的印象,这里就不具体描述了,不懂的话就去google

    仓库
    用来放置存储所有的工程 jar 文件、libraryjar文件、插件或任何其他的工程指定的文件。
    本地仓库:本机上的文件夹。
    中央仓库:由Maven社区管理,不需要配置,需要通过网络才能访问。
    远程仓库:由开发人员自己定制的仓库。

    Maven依赖搜寻顺序:
    步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
    步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤4,如果找到了则下载到本地仓库中已被将来引用。
    步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
    步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库已被将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

    插件
    执行插件的语法如下:
    mvn [plugin-name]:[goal-name] ;插件名称:目标名称

    插件是在 pom.xml 中使用 plugins 元素定义的。
    每个插件可以有多个目标。
    你可以定义阶段,插件会使用它的 phase元素开始处理。我们已经使用了 clean 阶段。
    你可以通过绑定到插件的目标的方式来配置要执行的任务。我们已经绑定了 echo 任务到 maven-antrun-plugin 的 run 目标。
    就是这样,Maven 将处理剩下的事情。它将下载本地仓库中获取不到的插件,并开始处理。插件我是这么理解的,就是感觉跟使用bash命令差不多。

    依赖关系

    1.传递性依赖
    不用担心引入多余的依赖,Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中去。1. 路径最近者优先。2. 第一声明者优先,即顺序最靠前的那个依赖优先

    2.排除依赖
    声明exclusion的时候只需要groupId和artifactId即可,而不需要version元素,这是因为只需要groupId和artifactId就能唯一定位依赖图中的某个依赖。换句话说,Maven解析后的依赖中,不可能出现groupId和artifactId相同,但是version不同的两个依赖。

    总结:
    这个应该是在成熟的团队使用的。顺便了解下也是不错的。提高篇的传送门 以下是推荐类似功能的工具,思路都差不多。我错过了ant时代,我也错过了maven时代,但我不能错过gradle时代!

    相关文章

      网友评论

          本文标题:Maven学习总结

          本文链接:https://www.haomeiwen.com/subject/wsuyottx.html