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-SNAPSHOT\META-INF\MANIFEST.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 任务都会使用上面的配置。

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

猜你喜欢

转载自www.cnblogs.com/BaiLaowu/p/9369542.html