Maven生命周期和插件

179 阅读2分钟

1.引入

各种项目构建的流程大体是相似的,因此Maven引入生命周期来对项目构建过程进行抽象和统一。


2.生命周期

Maven生命周期不是一个整体,而是三套相互独立的生命周期,分别为Clean、Default和Site。每套生命周期又由不同阶段phase组成。

  • Clean

    • pre-clean - 清理前做的工作
    • clean - 清理上一次构建生成的文件
    • post-clean - 清理后做的工作
  • Default(下面只包含部分阶段)

    • validate - 检查项目正确性和必要信息是否存在
    • compile - 编译项目源代码
    • test - 使用合适的单元测试框架测试编译后的代码,不需要代码打包或发布
    • package - 用合适的分发格式打包编译后的代码
    • verify - 检查集成测试的结果是否符合质量标准
    • install - 将包安装到Maven本地仓库,给本地的其他Maven项目使用
    • deploy - 将最终的包复制的远程仓库,供其他开发人员和Maven项目使用
  • Site

    • pre-site - 生成项目站点前做的工作
    • site - 生成项目站点文档
    • post-site - 生成项目站点后做的工作
    • site-deploy - 将站点发布到服务器上

生命周期的阶段具有前后依赖关系,例如执行test会按照validate compile ...的顺序执行过来。


3.插件

  • Maven生命周期是抽象的,其实际行为都由插件完成(类似于模板方法)。

  • 对于插件本身,它被设计成具有多种功能,一种功能对应一个插件目标。

  • 生命周期阶段和插件目标相互绑定,以完成某个具体的构建任务。

  • 为了方便构建Maven项目,Maven为主要的生命周期阶段绑定了默认的插件。

  • 也可以在POM文件中自定义生命周期阶段绑定的插件(下面将verify阶段和maven-source-pluginjar-no-fork插件目标相绑定):

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-source-plugin</artifactId>
      <version>2.1.1</version>
      <executions>
        <execution>
          <id>attach-sources</id>
          <phase>verify</phase>
          <goals>
            <goal>jar-no-fork</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>