Maven

Maven本质是一个项目管理工具,将次项目开发和管理过程抽成一个项目对象模型(POM)

POM:项目对象模型

生命周期

Maven基础概念
仓库

用于存储资源,包含各种jar包

  • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
  • 远程仓库:非本机电脑上的仓库,为本机仓库提供资源
    • 中央仓库:Maven团队维护,存储所有资源的仓库
    • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
  • 私服的作用:
    • 保存具有版权的资源,包含购买或自主开发的jar
      • 中央仓库的jar都是开源的,不能存储具有版权的资源
    • 一定范围内共享资源,仅对内部开放,不对外共享
坐标

Maven中的坐标用于描述仓库中资源的位置

Maven坐标的组成

  • groupId:定义当前Maven项目隶属组织名称
  • artifactId:定义当前Maven项目名称
  • version:定义当前项目版本号
依赖管理
依赖配置
  • 依赖指当前项目运行所需的jar,一个项目可以设置多个依赖

  • 格式:

    <!--设置当前项目所依赖的所有jar-->
    <dependencies>
        <!--设置具体的依赖-->
        <dependency>
        <!--依赖所属群组id-->
            <groupId>junit</groupId>
        	<!--依赖所属项目id-->
            <artifactId>junit</artifactId>
            <!--依赖版本号-->
            <version>4.12</version>
        </dependency>
    </dependencies>    
依赖传递

将一个项目依赖直接作为依赖项赋值给另一个项目,该项目依赖进行继承传递

  • 直接依赖:在当前项目中通过依赖配置建立的依赖关系
  • 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
  • 依赖优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
可选依赖
  • 可选依赖指对外隐藏当前所依赖的资源

    <optional>true</optional>
排除依赖
  • 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本

    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
依赖范围
  • 依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

  • 作用范围

    • 主程序范围有效(main文件夹范围内)

    • 测试程序范围有效(test文件夹范围内)

    • 是否参与打包(package指令范围内)

    • scope 主代码 测试代码 打包 范例
      compile(默认) Y Y Y log4j
      test Y junit
      provided Y Y servlet-api
      runtime Y jdbc
生命周期与插件
构建生命周期

compile -> test-compile -> test -> package -> install

  • Maven对项目构建的生命周期划分为3套
    • clean :清理工作
    • default :核心工作,例如编译,测试,打包,部署等
    • site :产生报告,发布站点等
clean生命周期
  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后立刻完成的工作
default生命周期

包含了普通编译测试打包的全部等

site构建生命周期
  • pre-site:执行一些需要在生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy:将生成的站点文档部署到特定的服务器上
插件
  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能

  • 默认maven在各个生命周期上绑定有预设的功能

  • 通过插件可以自定义其他功能

    <executions>
        <execution>
            <goals>
                <goal>jar</goal>
            </goals>
            <phase>generate-test-resources</phase>
        </execution>
    </executions>