maven-插件和生命周期阶段绑定

Author Avatar
丁起男 11月 25,2020
  • 在其它设备中阅读本文章

maven-插件和生命周期阶段绑定

maven只是定义了生命周期中的阶段,而没有定义每个阶段中具体的实现,这些实现是由插件的目标来完成的,所以是v要将阶段和插件目标进行绑定,来让目标帮助生命周期的阶段做具体的工作,生命周期中每个阶段支持绑定多个插件的多个目标。

当我们将生命周期中的阶段和插件的目标进行绑定的时候,执行mvn阶段就可以执行和这些阶段绑定的插件目标。

maven内置插件以及绑定

maven为了让我们不用做任何配置就可以实现一些项目的构件操作,比如原先mvn clean就可以帮我们清理代码,运行mvn install就可以将构件安装到本地仓库,所以maven帮我们做了一些时间,maven内部已经提供了很多默认的插件,而将一些阶段默认和这些插件阶段绑定好了,所有我们不用做任何配置就可以执行清理代码、编译代码、测试、打包、安装到本地仓库、上传到远程仓库等阶段的操作,是因为maven已经默认给这些阶段绑定好了插件目标,所有不需要我们再去配置,就直接可以运行,这些都是maven内置绑定帮我们做的事情

内置绑定

clean生命周期

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

clean周期中只有clean阶段默认绑定了maven-clean-plugin插件的clean目标。clean目标的作用就是删除项目的输出目录

default生命周期

阶段目标任务
validate
initialize
generate-sources
process-sources
generate-resources
process-resourcesmaven-resources-plugin:resources复制主资源文件至输出目录
compilemaven-compiler-plugin:compile编译主代码至主输出目录
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resourcesmaven-resources-plugin:testResources复制测试资源文件至测试输出目录
test-compilemaven-compiler-plugin:testCompile编译测试代码至测试输出目录
process-test-classes
testmaven-surefile-plugin:test执行测试用例
prepare-package
packagemaven-jar-plugin:jar创建项目jar包
pre-integration-test
integration-test
post-integration-test
verify
installmaven-install-plugin:install将输出构件安装到本地仓库
deploymaven-deploy-plugin:deploy将输入的构件部署到远程仓库

site生命周期

阶段目标
pre-site
sitemaven-site-plugin:site
post-site
site-deploymaven-site-plugin:deploy

自定义绑定

除了默认绑定的一些操作,我们自己也可以将一些阶段绑定到指定的插件目标上来完成一些操作,这种自定义绑定让maven项目在构件的过程中可以执行更多等丰富的操作。

配置:

在项目的pom.xml中加入配置:

<build> 
    <plugins> 
        <plugin> 
            <!-- 插件groupId -->
            <groupId></groupId> 
            <!-- 插件artifactId -->
            <artifactId></artifactId> 
            <!-- 插件version -->
            <version></version> 
            <executions> 
                <!-- 使用插件需要执行的任务 --> 
                <execution> 
                    <!-- 任务id,会在执行时输出,需唯一,如果不指定,默认为default --> 
                    <id></id> 
                    <!-- 任务中插件的目标,可以指定多个 --> 
                    <goals> 
                        <goal></goal> 
                    </goals> 
                    <!-- 绑定的阶段,有些插件的目标默认会绑定到一下阶段中,如果和要绑定的阶段一致,那么可以不用写 --> 
                    <phase></phase> 
                </execution> 
            </executions> 
        </plugin> 
    </plugins> 
</build>

每个插件的配置在pom.xml的plugins元素中只能写一次,否则会有警告

查看插件的默认绑定

mvn help:describe -Dplugin=插件goupId:插件artifactId[:插件version] -Dgoal目标名称 -Ddetail
mvn help:describe -Dplugin=插件前缀 -Dgoal=目标名称 -Ddetail

详情中有个Bound to phase:xxx,标识绑定在了xxx阶段上