zoukankan      html  css  js  c++  java
  • maven 生命周期、生命周期阶段、插件、目标

    生命周期
    maven的生命周期是抽象的,它本身不做任何实际的工作。实际的工作都由插件来完成。生命周期好比接口,插件好比实现类。
    maven 有三个独立的生命周期,clean、default、site。


    生命周期阶段

    每个生命周期包含一些生命周期阶段,这些阶段是有顺序的,后面的阶段依赖于前面的阶段。
    clean生命周期包含的阶段:pre-clean、clean、post-clean

    default生命周期包含的阶段:
    1 process-sources、2 compile、3 process-test-sources、4 test-compile、5 test、6 package、 verify、8 install、9 deploy
    1 处理主资源文件、2 编译主代码、3 处理测试资源文件、4 编译测试代码、5 运行测试、6 将编译好的代码打包、---- 、8 将包安装到本地仓库、9 将包安装到远程仓库

    site生命周期包含的阶段:
    pre-site、site(生成项目站点文档)、post-site、site-deploy(把生成的项目站点发布到服务器上)

    生命周期阶段:mvn clean package ,表示执行生命周期阶段clean、package。
    执行顺序:clean --> resources --> compile --> testResources --> testCompile --> test --> jar --> shade --> install
    clear --> 清理target目录
    resources --> 处理主资源
    compile --> 编译主代码至target/classes目录
    testResources --> 处理测试资源
    testCompile --> 编译测试代码
    test --> 测试
    jar --> 打包到target目录下
    shade --> 给hello-world-1.0-SNAPSHOTMETA-INFMANIFEST.MF 目录里添加Main-Class信息,如:Main-Class: com.juvenxu.mvnbook.helloworld.HelloWorld
    install --> 把没有Main-Class信息的包添加到本地仓库。

    要想执行shade插件,pom文件里要添加插件依赖如下,否则默认不执行shade;添加这个依赖后,无论在命令行还是在eclipse里都会执行shade插件。

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>
                        </transformer>
                    </transformers>
                </configuration>
            </execution>
        </executions>
    </plugin>

    插件前缀
    mvn dependency:tree
    mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:tree
    上面两条命令的功能是一样的,第一条命令冒号前的dependencyorg.apache.maven.plugins:maven-dependency-plugin:2.1插件的插件前缀。这个插件是官方插件,组Id默认就是org.apache.maven.plugins,版本号在超级pom里定义着。


    生命周期阶段与插件目标内置绑定

    比如:mvn clean
    clean 生命周期阶段和 maven-clean-plugin:clean 插件目标内置绑定


    生命周期阶段与插件目标自定义绑定

    一个常见的例子是创建项目的源码jar包,我们可以把 maven-source-plugin 的 jar-no-fork 目标绑定到default生命周期的verify阶段上,在执行完集成测试和安装构件之前创建源码jar包。
    配置如下:

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

    命令行运行 mvn verify 或者 eclipse 里直接install结果如下:

    有时候,即使不通过phase元素配置生命周期阶段,插件目标也能绑定到生命周期中。把上面的<phase>verify</phase>删掉,再次执行,也可以输出源码包。
    原因:很多插件的目标已经默认绑定了某一个生命周期阶段。这里目标jar-no-fork被默认绑定到了package阶段。


    插件参数

    几乎所有maven插件的目标都有一些可配置的参数

    命令行插件参数配置
    mvn install -Dmaven.test.skip=true

    pom中全局插件参数配置
    有些参数的值从项目创建到发布都不会改变或很少改变,比如:
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    这样不管是 maven-compiler-plugin:compile任务,还是 maven-compiler-plugin:testCompile 任务都会使用上面的配置。

    为某个任务配置特定的参数,这是特定任务的配置,不是插件整体的配置

  • 相关阅读:
    解决Laravel 开启HTTPS反向代理时Url一直是Http问题
    Laravel Passport 401 Unauthenticated.
    Windows 10 1909 (2020年1月) DVD (Chinese-Simplified)
    Office Professional Plus 2019 下载安装激活
    电脑设置U盘启动快捷键
    适用于 Laravel 的阿里云MNS队列驱动
    idea 2021版下创建springMvc项目过程
    UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)
    Mac 下打包python 程序
    Tomcat 对 servlet 的支持表
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/9369542.html
Copyright © 2011-2022 走看看