1. 1. 组成
  2. 2. 配置
  3. 3. 依赖
  4. 4. 生命周期与插件
  5. 5. 分模块开发与设计
  6. 6. 聚合依赖
  7. 7. 继承
  8. 8. 属性
  9. 9. 版本管理
  10. 10. 多环境开发配置-不需逐个更改文件即可兼容(生产环境/开发环境/测试环境……)
  11. 11. 跳过测试

喔,填坑呢在这

组成

  1. 坐标
    • groupId 隶属组织名称
    • artifactId 当前项目名称
    • version 当前版本号
    • packaging 打包方式(默认为jar)
    • 作用:唯一定位该资源,查找、下载并使用资源

配置

  1. 环境变量MAVEN_HOME
  2. 可以配置settings.xml(全局生效),也可以配置pom.xml(对当前项目生效)
  3. 本地仓库配置
  4. 配置镜像仓库(加速下载,常用阿里云仓库)

依赖

  1. 项目可以依赖项目
  2. 项目可以依赖现成的包
  3. 依赖中存在的问题:
    • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
    • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
    • 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的
  4. 可选依赖
    • 场景:不希望别人知道我用过这个依赖
    • 效果:当前项目使用该依赖,但依赖该项目的项目不自动引用该依赖
  5. 排除依赖
    • 场景:不希望使用某依赖
    • 在一个dependency里写:
      1
      2
      3
      4
      5
      6
      <exclusions>
      <exclusion>
      <groupId></groupid>
      <artifactId></artifactId>
      </exclusion>
      </exclusions>
    • 效果:若当前项目排除了依赖项目的A依赖,则该A依赖不会被当前应用所依赖
  6. 依赖范围:
    注意:依赖范围具有传递性
    1
    <scope></scope>
    scope 主代码 测试代码 打包
    compile(默认) 1 1 1
    test 0 1 0
    provided 1 1 0
    runtime 0 0 1

生命周期与插件

clean 清理
pre-clean
clean
post-clean
default 核心工作(编译、测试、打包、部署)

site 产生报告
pre-
site
post-site
site-deploy

插件:与生命周期相绑定
或者可以说maven的每一个生命周期都是利用插件来实现的

  • 引入
    引入方式同依赖,只不过把dependency改成plubins/plugin
    <groupId>…</groupId>
    <artifactId>….</artifactId>
    <version>…</version>
  • 目标
    设置<executions>…</executions>
    下层:指令</goal>
    运行阶段</phase>
    即为在哪个生命周期中执行该插件

分模块开发与设计

总目标:将程序拆装成不同模块,利用接口通信 (不是java的接口)
controller 控制层
service 业务层
dao 持久层
pojo 展示层

聚合依赖

用一个模块来管理其他模块

  • 设置聚合模块打包方式为pom
  • <modules>被聚合的工程列表</modules>

继承

  • 模块依赖关系维护
    子模块可以声明需要依赖,但是不限定版本,若出现版本冲突则会难以解决
    解决方案:
    • 在聚合模块中声明所有的依赖
    • 在子模块中声明<parent>工件ID/版本/GroupId….</parent>
    • 子工程在设计dependency时不需要写version
      继承的作用:子工程中沿用父工程的依赖配置

属性

定义自定义属性

1
2
3
4
5
6
7
<properties>
<技术名称.version>变量值</技术名称.version>
<!--默认变量version为上文artifact配置信息中的version-->
</properties>
<!--引用方法-->
${技术名称.version}

版本管理

  • 关于版本号命名的小常识
    • snapshot 开发过程中,为方便合作或解决依赖等,输出的临时性版本,会随着开发的进展不断更新,更新周期较短
    • release 经过测试后,团队对外发布的,运行较为稳定的版本,更新周期较长
    • 关于版本号的一些约定:<主版本><次版本><增量版本><里程碑版本>
    • 如:5.1.13-Release

多环境开发配置-不需逐个更改文件即可兼容(生产环境/开发环境/测试环境……)

1
2
3
4
5
6
7
8
9
10
11
12
<profiles>
<profile>
<id>produce_dev</id>
<properties>
<!--配置相关属性-->
</properties>
<activation>
<!--设置默认启动方式-->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>

执行特定环境方法:mvn -P [环境名称]

跳过测试

  • 常用场景:
    • 模块功能未开发(完毕)
    • 单个功能更新导致其他功能失效
    • 快速打包
  • 方式
    • 在maven配置窗口跳过
    • mvn -D skipTests
    • 在pom中配置测试插件(maven-surefire-plugin),设置<skipTests>true</skipTests>(不建议使用)
  • 只使用部分用例测试
    • 在测试插件(maven-surefire-plugin)的configuration中,设置include-对应的测试用例(.java)