Maven概念

Maven概念

约定优先于配置

  1. 标准的目录结构

    1. *.java放在src/main/java目录下
    2. *.class在target目录下
    3. 配置及静态文件
PS:通过标准的目录结构,只需要将对应文件放置在指定位置,Maven就能自动进行管理了。

  1. 项目描述符,pom.xml

POM(Project Object Model)项目对象模型

  1. xml文件


  1. artifact可以认为为一个项目

  2. packaging是项目类型有pom,jar,war

    1. pom用于项目继承和多模块项目
    2. jar用于java项目
    3. war用于javaweb项目
  3. 坐标(groupId,artifactId,version),唯一标识一个项目

  4. 属性,${property}引用,相当于常量,可以去除重复


  1. 依赖,dependencies,可以依赖其他项目


  1. 构建配置,build,配置插件等


  1. 多项目、继承


  1. 项目总体信息


POM继承

  1. 概念类比JAVA的继承或者覆盖(Override)

  2. 可继承项

    1. 坐标属性,如groupId
    2. 依赖配置,
    3. 插件配置
    4. 一般性信息,如开发者信息,项目协议
  3. Root类,Super POM

    1. 所有的Maven项目都是直接或者间接的从Super POM继承下来的(如果没有指明父POM,则默认是继承Super POM)
    2. 是Maven的组成部分
    3. Super POM定义了一组被所有项目共享的默认设置
      1. 默认的文件位置
      2. 统一的插件配置
      3. 默认的中央仓库配置
    4. 继承配置
      1. 使用parent元素
  4. POM框架模型图



多模块构建

  1. parent项目,类型是pom

    1. 定义modules

  1. 子模块(项目)中配置parent,继承父POM

  1. 配置多项目既会使用继承也会使用组合

    1. dependencies,developers,contributors,plugin列表,resources是组合形式的

依赖配置

  1. 示意图


  1. 依赖坐标,(groupId,artifactId,version)

  2. scope(范围)配置

    1. compile(默认),编译时需要,打包也会放进去
    2. provided,编译时需要,打包时不需要
  3. 用于继承的pom配置

    1. dependencyManagement(依赖管理)



仓库

  1. 用于统一存储所有Maven项目共享的构建的空间

  2. 仓库分类

    1. 本地仓库(优先)
PS:Maven本地仓库默认路径为:${user.home}/.m2/repository
SwitchdeMacBook-Pro:maven-restaurant switch$ ls ~/.m2/repository/
antlr commons-collections jtidy velocity
asm commons-io junit xerces
backport-util-concurrent commons-lang log4j xml-apis
classworlds commons-logging net xmlpull
com dom4j org xpp3
commons-cli javax oro

commons-codec jdom plexus
SwitchdeMacBook-Pro:maven-restaurant switch$ 
    1. 远程仓库
      1. 本地仓库查找优先
      2. 提供Maven项目访问并下载构件至本地仓库
      3. 目录结构:/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaginh>
      4. 分类
        1. 中央仓库(Maven自带)
        2. 其他公共仓库(比如阿里云的Maven仓库)
        3. 私服(内部搭建的)
      5. 配置
        1. 使用配置文件setting.xml(对于所有项目,指定仓库)
        2. 在pom.xml为依赖指定repositories(对某一些项目指定仓库)

构件生命周期

  1. 一个构建生命周期是一组精心组织的有序的阶段

  2. 每个阶段执行预先定义的动作

    1. 编译
    2. 打包
    3. 部署等
  3. 这些动作会根据项目的类型进行选择

  4. 三套独立的生命周期

    1. clean(删除构建输出的东西,jar包,class文件之类的)
      1. pre-clean(清除之前的预处理工作)—>clean(移除上次构建生成的文件)->post-clean(执行一些需要在clean之后完成的工作)
    2. default
      1. …->process-resources->compile->…->test->package->install->deploy
      2. validate(验证项目完整性)
      3. process-resources(将资源文件复制到目标目录下,打包需要)
      4. compile(编译用户源代码)
      5. test(单元测试)
      6. package(打包,java项目打成jar包,web项目打成war包)
      7. install(将包安装到本地仓库)
      8. deploy(将包上传到远程仓库,其他开发人员可以通过远程仓库使用上传的包)
    3. site(生成站点文档,开源项目使用较多)
      1. pre-site->site->post-site->site-deploy

Maven架构(插件和目标)

  1. 插件(Plugin)式架构,小引擎+大量插件

  2. 所有的插件本身也是一个Maven构件,由Maven仓库管理

  3. 每一个插件提供多个目标(Goal)

  4. 调用目标的格式

    1. mvn <Plugin>:<Goal> 


构建生命周期与插件目标的关系

  1. 生命周期阶段与目标绑定

  2. 用户通过指定生命周期阶段就能够隐式的通过插件执行任务


  1. mvn compile <——>mvn compiler:compile

  2. 对于package阶段,会根据项目类型不同,绑定到不同的目标(其他的阶段绑定都是固定的)


插件配置

  1. 示意图


  1. 插件配置元素

    1. groupId
    2. artifactId
    3. configuration配置项
    4. 查看插件提供的配置项:mvn help:describe -Dplugin=<plugin_name> -Dgoal=<goal> -Ddetail=true
      1. 例如:mvn help:describe -Dplugin=compiler -Dgoal=compile -Ddetail=true
    5. 对于继承的父pom
      1. pluginManagement(插件管理)——参考dependencyManagement
    6. plugins
      1. mvn内建插件
      2. help插件
        1. mvn help:help -Ddetail=true(查看help插件的帮助文档)
      3. tomcat7插件
      4. exec插件(执行jar包)
      5. 自定义插件

Maven整体框架图



Maven使用整体流程





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值