Maven

Maven的作用


代码构建工具
从源代码到可以运行的程序文件,需要一系列构建过程
POM(Project object model),通过pom.xml描述了项目的配置

  • 依赖管理

    • 构建时获取依赖包而不是人工把依赖包放在项目lib下
    • 版本控制系统只保存当前项目源码,不保存依赖包,节省空间
    • 依赖链管理
    • 依赖包版本控制
  • 构建流程

    • 流程复用

远程仓库 本地仓库(~/.m2/repository)

构建流程(lifecycle-phase-goal)


Maven生命周期由三部分组成,每个周期包含一系列阶段

  • default: 项目部署
    • validate: 信息校验
    • initialize: 创建文件夹等
    • generate-sources: 生成源代码
    • process-sources: 处理源代码
    • generate-resources: 生成资源
    • process-resources: 处理资源
    • compile: 编译源代码
    • process-classes: 编译后处理,不如字节码增强
    • generate-test-sources
    • process-test-sources
    • generate-test-resources
    • process-test-resources
    • test-compile: 编译测试代码
    • process-test-classes
    • test: 单元测试
    • package: 工程打包
    • verify: 集成测试
    • install: 安装到本地仓库
    • deploy: 发布到远程仓库
  • clean: 项目清理
    • clean: 删除上一次构建的所有文件
  • site: 文档生成

同一周期内各个阶段顺序执行
调用install会执行之前的所有阶段

1
mvn install

不同部分的阶段可以组合调用
在干净的环境下构建并发布

1
mvn clean deploy

阶段只是概念节点,真正执行任务的是一系列插件,一个阶段可以绑定0或多个插件goals

每种打包方式指定一套对各个阶段的插件目标绑定,打包可选jar,war,ear,pom
jar对应的默认绑定

Phase Goals
process-resources resources:resources
compile compiler:compile
process-test-resources resources:testTesources
test-compile compiler:testCompile
test surefire:test
package jar:jar
install install:install
deploy deploy:deploy

插件goals也可以独立于阶段之外,直接调用,用冒号具体指定

1
mvn clean dependency:copy-dependencies package

以上都是默认插件,具体到项目,可以在pom文件中引入自定义扩展插件,声明执行阶段和执行目标
build标签下plugin内添加自定义插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<plugins>
<plugin>
<groupId>com.mycompany.example</groupId>
<artifactId>display-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>process-test-resources</phase>
<goals>
<goal>time</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>