zoukankan      html  css  js  c++  java
  • Maven生命周期小记

    1、Maven生命周期是为了所有的构建过程进行抽象和统一。Maven从大量的项目和构建工具中学习和反思,总结了一套高度完善、易扩展的生命周期。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。

    2、Maven三套独立的生命周期

        clean生命周期,包含三个阶段

            1)pre-clean执行一些清理前需要完成的工作

            2)clean清理上次构建的文件

            3)post-clean执行一些清理后需要完成的工作

        default生命周期

            validate

            initialize

            generate-sources

            process-sources处理主项目资源文件,对src/main/resources目录内容进行变量替换以后复制到项目输出的主目录

            generate-resources

            process-resources

            compile编译项目的主源码,编译src/main/java目录下的java文件至项目输出的主目录

            process-classes

            genarate-test-sources

            process-test-sources处理测试资源文件

            genarate-test-resources

            process-test-resources

            test-compile编译项目测试代码

            process-test-classes 

            test使用单元测试框架运行测试,测试代码不会被打包和部署

            prepare-package

            package接受编译好的代码,打包成可发布的格式,如JAR、WAR

            pre-integration-test 

            integration-test

            post-integration-test 

            verify

            intall将包安装到Maven本地库

            deploy将最终包复制到远程仓库

            site生命周期

                    pre-site执行一些生成项目站点之前的工作

                    site生成项目站点文档

                    post-site执行一些生成项目站点之后需要完成的工作

                    site-deploy将生成的站点发布到服务器上

    3、插件目标

        对于Maven插件本身为了能够复用代码一个插件往往能执行很多个功能。这些功能聚集在一个插件里,每个功能就是插件的一个目标。

    4、插件绑定

        Maven的生命周期是与插件绑定的,用以完成实际的构建任务。具体而言,是生命周期阶段和插件目标的相互绑定,以完成某个具体的构建任务。例如项目编译这一任务,它对应了default生命周期的compile这一阶段,而maven-compiler-plugin这一插件的compile目标能够完成该任务。因此将它们绑定。

                            

    5、内置绑定

      clean生命周期阶段与插件目标的绑定关系

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

      site生命周期阶段与插件目标的绑定关系 

    生命周期阶段插件目标
    pre-site  
    site maven-site-plugin:site
    post-site  
    site-deploy maven-site-plugin:deploy

      default生命周期与内置插件绑定关系及具体任务(打包类型: jar)

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

    注意:以上只列出了拥有插件绑定关系的阶段,default生命周期还有很多其他阶段,默认它们没有绑定任何插件,因此也没有任何实际行为。

    6、自定义绑定

       除了内置绑定以外,用户还能自己选择将某个插件目标绑定到生命周期的某个阶段上。一个常用的例子是创建项目的源码JAR包。我们使用maven-source-plugin插件完成我们的任务,它的jar-no-fork目标能将主代码打成jar包。具体配置如下:

    <build>
        <plugins>
            <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>
        </plugins>
       </build>

    executions下的每个execution子元素可以用来配置执行一个任务。该例子中配置了一个ID为attach-sources任务,通过phase配置,将其绑定到verify生命周期阶段,再通过goal配置指定的插件目标。最后运行以下命令:

    mvn verify

    注意:有时候即使不通过phase元素配置生命周期阶段,插件目标也能绑定到生命周期阶段。原因是:很多插件的目标在编写时已经定义了默认的绑定阶段。可以使用maven-help-plugin查看插件详细信息。了解插件的默认绑定阶段。运行如下命令:

    mvn help:describe -DgroupId=org.apache.maven.plugins -DartifactId=maven-source-plugin -Dversion=2.1.1 -Ddetail

    输出如下:

    source:test-jar-no-fork
      Description: This goal bundles all the test sources into a jar archive.
        This goal functions the same as the test-jar goal but does not fork the
        build, and is suitable for attaching to the build lifecycle.
      Implementation: org.apache.maven.plugin.source.TestSourceJarNoForkMojo
      Language: java
      Bound to phase: package
    
      Available parameters:
    
        archive
          The archive configuration to use. See Maven Archiver Reference.

    这里关心的是Bound to phase: package,表示该目标表默认绑定到的生命周期阶段,这里是package。也就是说如果用户配置使用jar-no-fork目标的时候,如果不指定phase参数,该目标默认昂定到package阶段。

     7、命令行插件配置

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

    mvn install -Dmaven.test.skip=true

    参数-D是java自带的,其功能是通过命令行设置一个java系统属性,maven简单的重用了该参数。

    8、在线插件信息

          详情了解:http://maven.apache.org/plugins/index.html

      下载地址:http://repo1.maven.org/maven2/org/apache/maven/plugins/

    9、目标前缀

      完整命令:

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

      采用目标前缀:

    mvn help:describe -Dplugin=compiler

    help是maven-help-plugin的目标前缀,目标前缀使命令更加简洁明了。

    10、 插件仓库

      Maven会区别对待依赖的远程仓库和插件远程仓库,不同于repositories及其子元素repository插件仓库使用pluginRepositories和pluginRepository配置。例如:

    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>http://repo1.maven.org/maven2</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

    除了pluginRepositories和pluginRepository外其余子元素所表达的含义和远程仓库配置完全一样。

    11、解析groupId、插件版本、artifactId

      1)使用目标前缀时groupId会自动用默认的org.apache.maven.plugins补全。

      2)如果没有指定版本信息,会根据解析maven-metadata.xml,Maven2中会被解析至latest,Maven3中使用release。

      3)如果setting.xml文件有配置如下配置,Maven就不仅仅会检查org/apache/maven/plugins/maven-metadata.xml和org/codehaus/mojo/maven-metadata.xml,还会检查com/your/plugins/maven-metadata.xml。这样就能得到完整的插件坐标,如果三个文件没有记录该插件的前缀,则报错。

    <pluginGroups>
     <pluginGroup>com.your.plugins</pluginGroup>
    </pluginGroups>

        

  • 相关阅读:
    js 实现 间隙滚动效果
    js实现无缝滚动
    js 实现弹出层效果
    jQuery实现网页定位导航
    右侧定位的样式
    jQuery实现点击按钮展开和收起
    js实现点击按钮控制展开与收起.
    【BZOJ1202】[HNOI2005]狡猾的商人 带权并查集
    【BZOJ1067】[SCOI2007]降雨量 RMQ+特判
    【BZOJ1367】[Baltic2004]sequence 左偏树
  • 原文地址:https://www.cnblogs.com/maxiaofang/p/5879453.html
Copyright © 2011-2022 走看看