zoukankan      html  css  js  c++  java
  • maven生命周期理解

    你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

    知道了每套生命周期的大概用途和相互关系以后,来逐个详细看一下每套生命周期,Clean和Site相对比较简单,先解释一下。

    每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有点绕?要知道有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:

    • pre-clean  执行一些需要在clean之前完成的工作
    • clean  移除所有上一次构建生成的文件
    • post-clean  执行一些需要在clean之后立刻完成的工作

    mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。

    下面看一下Site生命周期的各个阶段:

    • pre-site     执行一些需要在生成站点文档之前完成的工作
    • site    生成项目的站点文档
    • post-site     执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
    • site-deploy     将生成的站点文档部署到特定的服务器上

    这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。

    最后,来看一下Maven的最重要的Default生命周期,绝大部分工作都发生在这个生命周期中,这里,我只解释一些比较重要和常用的阶段:

    • validate
    • 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     使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
    • prepare-package
    • package     接受编译好的代码,打包成可发布的格式,如 JAR 。
    • pre-integration-test
    • integration-test
    • post-integration-test
    • verify
    • install     将包安装至本地仓库,以让其它项目依赖。
    • deploy     将最终的包复制到远程的仓库,以让其它开发人员与项目共享。

    基本上,根据名称我们就能猜出每个阶段的用途

    记住,运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。

    记住,运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。

    记住,运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。

    记住,运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。

    此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要,在之后的文章里,我将会进一步解释Maven的插件机制。

    一个完整的项目构建过程通常包括清理、编译、测试、打包、集成测试、验证、部署等步骤,Maven从中抽取了一套完善的、易扩展的生命周期。Maven的生命周期是抽象的,其中的具体任务都交由插件来完成。Maven为大多数构建任务编写并绑定了默认的插件,如针对编译的插件:maven-compiler-plugin。用户也可自行配置或编写插件。

    1 . 三套生命周期

      Maven定义了三套生命周期:clean、default、site,每个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命周期中的phase却是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase。

    1 . 1 clean生命周期

    1. pre-clean    :执行清理前的工作;
    2. clean    :清理上一次构建生成的所有文件;
    3. post-clean    :执行清理后的工作

    1 . 2 default生命周期

    default生命周期是最核心的,它包含了构建项目时真正需要执行的所有步骤。

    1. validate
    2. initialize
    3. generate-sources
    4. process-sources
    5. generate-resources
    6. process-resources    :复制和处理资源文件到target目录,准备打包;
    7. compile    :编译项目的源代码;
    8. process-classes
    9. generate-test-sources
    10. process-test-sources
    11. generate-test-resources
    12. process-test-resources
    13. test-compile    :编译测试源代码;
    14. process-test-classes
    15. test    :运行测试代码;
    16. prepare-package
    17. package    :打包成jar或者war或者其他格式的分发包;
    18. pre-integration-test
    19. integration-test
    20. post-integration-test
    21. verify
    22. install    :将打好的包安装到本地仓库,供其他项目使用;
    23. deploy    :将打好的包安装到远程仓库,供其他项目使用;

    1 . 3 site生命周期

    1. pre-site
    2. site    :生成项目的站点文档;
    3. post-site
    4. site-deploy    :发布生成的站点文档

    2 . Maven的插件

    Maven的核心文件很小,主要的任务都是由插件来完成。定位到:%本地仓库%orgapachemavenplugins,可以看到一些下载好的插件:

    Maven官网上有更详细的官方插件列表:

    2 . 1 插件的目标(Plugin Goals)

    一个插件通常可以完成多个任务,每一个任务就叫做插件的一个目标。如执行mvn install命令时,调用的插件和执行的插件目标如下:

    第二列中,冒号后面即是绑定的插件目标,冒号前面是插件的前缀(prefix),是配置和使用插件的一种简化方式。Plugin Prefix

    3 . 2 自定义绑定

      用户可以根据需要将任何插件目标绑定到任何生命周期的阶段,如:将maven-source-plugin的jar-no-fork目标绑定到default生命周期的package阶段,这样,以后在执行mvn package命令打包项目时,在package阶段之后会执行源代码打包,生成如:ehcache-core-2.5.0-sources.jar形式的源码包。

    复制代码
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <executions>
                    <execution>
                        <id>attach-source</id>
                        <phase>package</phase><!-- 要绑定到的生命周期的阶段 -->
                        <goals>
                            <goal>jar-no-fork</goal><!-- 要绑定的插件的目标 -->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        ……
    </build>
    复制代码

    4 . 配置插件

    Maven插件高度易扩展,可以方便的进行自定义配置。如:配置maven-compiler-plugin插件编译源代码的JDK版本为1.7:

    复制代码
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
    复制代码

    也可以对插件的各个目标进行更具体的配置。Configuring Plug-ins

    5 . 插件仓库

    跟其他构件一样,插件也是根据坐标存储在Maven仓库中。超级POM中Maven配置的默认插件远程仓库如下:

    复制代码
    <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <name>Central Repository</name>
          <url>http://repo.maven.apache.org/maven2</url>
          <layout>default</layout>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <releases>
            <updatePolicy>never</updatePolicy>
          </releases>
        </pluginRepository>
    </pluginRepositories>
    复制代码

     本文部分转自https://www.cnblogs.com/luotaoyeah/p/3819001.html 感谢作者

  • 相关阅读:
    netty+springboot+oracle+protobuf 搭建客户端服务端
    netty框架学习记录
    sql查询替换逗号拼接的字符窜
    Node的webpack打包的核心思想就是单页面富应用(SPA)
    Javascript 中的 CJS, AMD, UMD 和 ESM是什么
    springboot读取jar中resource下的文件
    zmq模块的理解和使用二
    问问题
    Java解析kml文件
    练习本
  • 原文地址:https://www.cnblogs.com/panxuejun/p/9149106.html
Copyright © 2011-2022 走看看