Maven之生命周期和插件

发布时间:2022-09-26 22:00

Maven之坐标和依赖_jerry_dyy的博客-CSDN博客

Maven之仓库_jerry_dyy的博客-CSDN博客

Maven之聚合与继承_jerry_dyy的博客-CSDN博客

Maven之生命周期和插件_jerry_dyy的博客-CSDN博客

生命周期是抽象的,不做任何实际的工作,实际的任务交由插件来完成。

生命周期:

Maven拥有三套相互独立的生命周期,它们分别为:clean,default,site。每个生命周期都包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段。

clean: 清理项目, 包含pre-clean,clean,post-clean三个阶段。

default: 构件项目,包含process-sources,compile,process-test-sources,test-compile,test,package,install,deploy等阶段。

site: 建立项目站点,包含pre-site, site, post-site, site-deploy四个阶段。

可以通过命令行来调用Maven的生命周期:

mvn clean,调用的是clean生命周期的pre-clean,clean阶段;

mvn package,调用的是default生命周期的validate、initialize等,直到package的所有阶段。

如果想要实现清理旧的构建内容并重新打包,可以使用:mvn clean package

插件:

插件目标:

以maven-dependency-plugin举例,它包含的几个插件目标为:dependency:analyze,dependency:tree,dependency:list等。冒号前面是插件前缀,冒号后面是该插件的目标。

插件绑定:

Maven的生命周期与插件相互绑定,用以完成实际的构建任务。具体而言就是,生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。例如:maven-compiler-plugin这一插件的compile目标能够绑定到default生命周期的complie这一阶段,完成编译任务。

Maven的默认绑定:

为了能让用户几乎不用任何配置就能构建Maven项目,Maven在核心为一些主要的生命周期阶段绑定了很多插件目标,当用户通过命令调用生命周期阶段的时候,对应的插件目标就会执行响应的任务。

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

自定义绑定:

用户还能够自己选择将某个插件目标绑定到生命周期的某个阶段上,一个常见的例子就是创建项目的源代码jar包(xxx-sources.jar),maven-source-plugin可以帮助我们完成该任务,它的jar-no-fork目标能够将该项目的主代码打包成jar文件,可以将其绑定到default生命周期的verify阶段上:


    org.apache.maven.plugins
    maven-source-plugin
    2.1.1
    
        
            attach-sources>
            verify
            
                jar-no-fork
            
        
    

如果多个插件的目标绑定到了同一个阶段,它们的执行顺序由这些插件声明的先后顺序决定了它们内部目标的执行顺序。

插件配置:

命令行配置插件:

用户可以通过命令行配置插件目标的参数,用户可以在Maven命令中使用-D参数,并伴随着一个参数键=参数值的形式,来配置插件目标的参数。

例如:maven-surfire-plugin提供了一个maven.test.skip参数,当其值为true的时候,就会跳过测试,于是,在运行命令的时候:mvn install -Dmaven.test.skip=true

参数-D是java自带的,其功能是通过命令行设置一个Java系统属性。

POM中插件全局配置:

并不是所有的插件参数都适合从命令行配置,有些参数的值从项目创建到项目发布都不会发生改变,对于这种情况,在POM文件中一次性配置就显然比重复在命令行输入方便。

用户可以在声明插件的适合,对此插件进行一个全局的配置。例如:配置maven-compiler-plugin,告诉它编译Java1.8版本的源文件,生成与JVM1.8兼容的字节码文件:


    org.apache.maven.plugins
    maven-compiler-plugins
    2.1
    
        1.8
        1.8
    

获取插件信息:

网站:

Apache:  Maven – Available Plugins

Codehaus:  http://mojo.codehaus.org/plugins.html

命令行:

Mvn help: describe -Dplugin =org.apache.maven.plugins:maven-compiler-plugin:2.1

这里执行的是maven-help-plugin的describe目标,在plugin中输入需要描述插件的groupId、artifactId、version,Maven在命令行输出maven-compiler-plugin的简要信息。

插件使用:

对于已经绑定到生命周期上的插件,在命令行输入生命周期即可调用得到。

对于不适合绑定到生命周期上的插件来说,可以通过命令行直接调用,例如:

Mvn help:describe

Mvn dependency:tree

其中help、dependency分别是maven-help-plugin和maven-dependency-plugin的插件前缀,所谓插件前缀其实就是插件的简写而已。

插件解析机制:

Maven会区别对待依赖的远程仓库与插件的远程仓库,repositories与pluginRepositories,插件解析机制与依赖解析机制差不多。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号