• maven生命周期和插件


    maven生命周期(lifecycle)对构建的过程进行了抽象和统一,实际的工作是由对应的插件(plugins)来完成的。

    maven生命周期

    maven生命周期可以分为三个部分:

    clean生命周期

    该周期的任务是清理项目,包含三个阶段:

     

    pre-clean执行清理前需要完成的工作
    clean 清理上一次构建生成的文件
    post-clean 执行清理后需要完成的工作

    default生命周期

    default生命周期定义了真正构建时需要的所有步骤。

    validate验证项目是正确的,所有必要的信息是可用的
    initialize 初始化构建状态,例如:设置属性或创建目录
    generate-sources 生成编译期的源代码。
    process-sources 处理项目主资源文件。一般来说是对src/main/resources目录内容 进行变量替换等工作后,复制到项目输出的主目录classpath目录中
    generate-resources 生成包含在打包过程中的资源
    process-resources 复制和处理资源到目标目录,准备打包
    compile 编译项目的源代码
    process-classes 处理编译后生成的class文件
    generate-test-sources 生成编译期内的测试源代码
    process-test-sources 处理测试源代码,如过滤一些值
    generate-test-resources 创建测试资源
    process-test-resources 复制测试资源到目标目录并处理
    test-compile 编译测试源代码到测试目标目录
    process-test-classes 处理编译测试代码后生成的class文件
    test 使用合适的单元测试框架运行测试。 这些测试代码不会被打包和 部署
    prepare-package 执行打包前需要的任何工作
    package 接收编译好的代码,打包成可发布的格式,如jar,war等
    pre-integration-test 执行集成测试之前所需的操作
    integration-test 如果需要,可以将软件包处理和部署到可以运行集成测试的环境中
    post-integration-test 执行集成测试之后所需的操作
    verify 运行任何检查以验证程序包是否有效并符合质量标准
    install 将程序包安装到maven本地仓库,供本地其他maven项目使用
    deploy 将最终包复制到远程仓库,供其它开发人员和maven项目使用

    site生命周期

    site生命周期的作用是建立和发布项目站点。

    pre-site执行一些在生成项目站点之前所需要完成的工作
    site 生成项目站点文档
    post-site 执行一些在生成项目站点之后需要完成的工作
    site-deploy 将生成的项目站点发布到服务器上

    maven生命周期是相互依赖的关系,如执行 mvn clean命令时,会执行pre-clean,clean阶段;执行mvn deploy会执行default生命周期前面的所有阶段。

    插件目标

    maven生命周期的各个阶段是和插件绑定在一起的,一个插件可以包含多个功能,每个功能对应生命周期的一个阶段,并称其为插件目标。如:maven-dependency-plugin包含插件目标:dependency:tree,dependency:list,dependency:analyze等。

    内置绑定插件

    maven在核心为一些主要的生命周期绑定了许多插件目标:

    clean生命周期阶段与插件绑定情况:

    生命周期阶段插件目标
    pre-clean maven-clean-plugin:clean
    clean  
    post-clean  

    default生命周期阶段与插件绑定情况及具体任务:

    生命周期阶段插件目标执行任务
    process-resources maven-resources-plugin:resources 复制主资源文件到输出 目录
    compile maven-compiler-plugin:compile 编译主代码到输出目录
    process-test-resources maven-resources-plugin:testResources 复制测试资源文件到输 出目录
    test-compile maven-compiler-plugin:testCompile 编译测试代码到输出目 录
    test maven-surefire-plugin:test 执行测试用例
    package maven-jar-plugin:jar 创建项目jar包
    install maven-install-plugin:install 将项目输出构件安装到 本地仓库
    deploy maven-deploy-plugin:deploy 将项目输出构件部署到 远程仓库

    site生命周期阶段与插件绑定情况:

    生命周期阶段插件目标
    pre-site maven-site-plugin:site
    site  
    post-site  
    site-deploy maven-site-plugin:deploy

    如,对项目执行 mvn clean install 命令:

    --- maven-clean-plugin:2.5:clean (default-clean) @ viswcm-project ---
    [INFO] Deleting D:workspaceviswcm-project arget
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ viswcm-project ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] Copying 0 resource
    [INFO]
    [INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ viswcm-project ---
    [INFO] Compiling 20 source files to D:workspaceviswcm-project argetclasses
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ viswcm-project ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] skip non existing resourceDirectory D:workspaceviswcm-projectsrc est esources
    [INFO]
    [INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ viswcm-project ---
    [INFO] Nothing to compile - all classes are up to date
    [INFO]
    [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ viswcm-project ---
    [INFO] No tests to run.
    [INFO]
    [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ viswcm-project ---
    [INFO] Building jar: D:workspaceviswcm-project argetviswcm-project-0.0.1-SNAPSHOT.jar
    [INFO]
    [INFO] --- maven-install-plugin:2.4:install (default-install) @ viswcm-project ---
    [INFO] Installing D:workspaceviswcm-project argetviswcm-project-0.0.1-SNAPSHOT.jar to D:64m2 epositorycomvisgreatviswcm-project.0.1-SNAPSHOTviswcm-project-0.0.1-SNAPSHOT.jar
    [INFO] Installing D:workspaceviswcm-projectpom.xml to D:64m2 epositorycomvisgreatviswcm-project.0.1-SNAPSHOTviswcm-project-0.0.1-SNAPSHOT.pom
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------

     

    其输出结果和上面的表格描述一致。

    自定义插件绑定

    除了maven内置绑定,我们还可以自行绑定某个插件到某个生命周期的某个阶段。

    比如要生成项目源码jar包,我们可以将maven-source-plugin插件配置到default生命周期的verify阶段:

    <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>

     

    上述配置描述了maven-source-plugin插件坐标外,还有插件执行配置executions元素下的每个execution子元素可以用来配置执行一个任务。这里配置了一个id为attach-sources的任务,通过phase元素,将其绑定到verify阶段上,再通过goals配置指定执行的插件目标。

    运行mvn verify

    [INFO] --- maven-source-plugin:2.1.1:jar-no-fork (attach-sources) @ viswcm-project ---
    •[INFO] Building jar: D:workspaceviswcm-project argetviswcm-project-0.0.1-SNAPSHOT-sources.jar

     

    获取插件信息

    maven官方插件:http://maven.apache.org/plugins/index.html

    maven官方插件下载地址:http://repo1.maven.org/maven2/org/apache/maven/plugins/

    配置插件仓库

    <pluginRepositories>
      <pluginRepository>
          <id>central</id>
          <name>Maven.Plugin.Repository</name>
          <url>http://repo1.maven.org/maven2</url>
          <layout>default</layout>
          <snapshots>
              <enabled>false</enabled>
          </snapshots>
          <releases>
              <updatePolicy>never</updatePolicy>
          </releases>
      </pluginRepository>
    </pluginRepositories>

    《Maven实战》读书笔记

  • 相关阅读:
    关于Class.forName(“com.mysql.jdbc.Driver”)
    Vector既然继承了AbstractList为啥还要实现List接口
    推荐两个支持Java的云主机空间
    关于“Return empty arrays or collections, not nulls”的思考
    "win7回收站已损坏"解决方法
    ibatis中使用like模糊查询
    当你升级到ubuntu12.04之后
    转一篇:如何快速的修改参考文献
    Java Annotations初探
    用eclipse开发android,xmllayout文件不自动提示,Java代码可以自动提示
  • 原文地址:https://www.cnblogs.com/7788IT/p/11625936.html
Copyright © 2020-2023  润新知