生命周期和插件(六)

生命周期和插件(六)

除了坐标、依赖以及仓库以外,maven另外两个核心概念是生命周期和插件。在有关maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段package。maven的生命周期是抽象的,其实际行为都由插件来完成,如package阶段的任务可能就会由maven-jar-plugin来完成。生命周期和插件两者协同工作,密不可分。

1.何为生命周期

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

2.生命周期详解

maven有用三套完全独立的生命周期,他们分别为clean、default、site。clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site生命周期的目的是建立项目站点。

每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段。用户和maven最直接的交互方式就是调用这些生命周期阶段。

clean生命周期:

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

clean:清理上一次构建生成的文件。

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

default生命周期:定义了真正构建时所需要执行的所有步骤,它是所有生命周期中最核心的部分,其包含的阶段如下:

validate:验证

initialize:初始化

generate-sources:生成主资源

process-sources:处理项目主资源文件

generate-resources:生成其他资源

process-resources:处理项目其他资源文件

compile:编译项目的主源码

process-classes:处理编译生成的文件

generate-test-sources:生成测试资源

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

generate-test-resources:生成其他测试资源

process-test-resources:处理项目其他测试资源文件

test-compile:编译项目的测试代码

process-test-classes:处理测试编译生成的文件

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

prepare-package:准备打包

package:接收编译好的代码,打包成可发布的格式,如JAR。

pre-integration-test:集成测试前的处理

integration-test:集成测试

post-integration-test:集成测试后的处理

verify:验证

install:将包安装到maven本地仓库,供本体其他maven项目使用。

deploy:将最终的包复制到远程仓库,供其他开发人员和maven项目使用。

site生命周期:site生命周期的目的是建立和发布项目站点,maven能够基于pom所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。

pre-site:执行一些在生成项目站点之前需要完成的工作。

site:生成项目站点文档。

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

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

3.插件目标

对于相同的功能,其实现功能的代码会有大量的重复性,所以为了代码复用,会把有大量复用代码的功能都集中到一个插件中,插件中的每个功能就是一个目标,我们叫做插件目标。

4.插件绑定

maven生命周期与插件相互绑定,用以完成实际的构建任务,具体而言,是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务,

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

内置的绑定:

clean阶段:maven-clean-plugin:clean

site阶段:maven-site-plugin:site

site-deploy:maven-site-plugin:deploy

process-resources:maven-resources-plugin:resources 复制主资源文件至主输出目录

compile:maven-compiler-plugin:compile 编译主代码至主输出目录

process-test-resources:maven-resources-plugin:testResources 复制测试资源文件至测试输出目录

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将项目输出构件部署到远程仓库

自定义绑定:

构建过程个性化设置,插件的参数设置等,用于定制构建生命周期中的个性化设置

  <build>
    声明构建过程中使用的多个插件,插件的目标,用于个性化构建配置
    <plugins>
      声明单个插件,并定义我们想要的插件行为,本例插件配置功能为,在构建的package阶段的工作完成后,阶段结束前,通过maven-shade-plugin插件的shade目标,设置构建出的jar包为可以通过java -jar执行的含有main方法的构件(大致过程是:package目标生成构件之后,shade按照配置中指定的条件生成新的jar,并且把package生成的jar修改名称,shade生成的构件替换掉package生成的构件,并且shard生成的构件按照配置在META-INF/MANIFEST.MF文件中设置属性Main-Class: com.shw.mvnp.mvnphelloworld.HelloWorld,这是Java -jar运行的必要条件)
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.2.1</version>
        插件执行配置 可以包含多个任务
        <executions>
          插件任务执行配置
          <execution>
            任务名称
            <id>MainClass</id>
            生命周期阶段 可以由不同的插件实现相同阶段,不同的功能
            阶段绑定
            <phase>package</phase>
            目标集合
            <goals>
              插件目标:一个插件可以有多个目标,相当于方法调用,本阶段要执行的插件目标,当多个插件目标绑定到同一个生命周期阶段,执行顺序是按照插件的声明顺序执行
              <goal>shade</goal>
            </goals>
            相应任务需要的参数配置
            <configuration>
              <transformers>
                <transformer implementation =
                                     "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>com.shw.test.testmaven.App</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

5.插件配置

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

-D是java自带的,功能是通过命令行设置一个java系统属性,maven在准备插件的时候会检查系统属性,实现插件参数的功能

POM中插件全局配置:

<plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-compiler-plugin</artifactId>

        <version>3.1</version>

        全局插件参数配置,生成1.5的编译文件

        <configuration>

          <source>1.5</source>

          <target>1.5</target>

        </configuration>

</plugin>

POM中插件任务配置:

<plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-antrun-plugin</artifactId>

        <version>1.3</version>

        <executions>

          <execution>

            <id>ant-validate</id>

            <phase>validate</phase>

            <goals>

              <goal>run</goal>

            </goals>

            <configuration>

              <tasks>

                <echo>to validate</echo>

              </tasks>

            </configuration>

          </execution>

          <execution>

            <id>ant-verify</id>

            <phase>verify</phase>

            <goals>

              <goal>run</goal>

            </goals>

            特定任务的配置

            <configuration>

              <tasks>

                <echo>to verify</echo>

              </tasks>

            </configuration>

          </execution>

        </executions>

      </plugin>

6.获取插件信息

命令行查看插件命令:

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 ->获取插件的简要信息

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin ->自动获取最新版本的简要信息

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail ->输出对应插件的详细信息

bound to phase:表示该目标默认绑定的生命周期阶段

mvn help:describe -Dplugin=compiler ->描述插件的前缀形式

goal prefix:插件的前缀信息

mvn help:describe -Dplugin=compiler -Dgoal=compile ->描述插件的指定目标的信息

mvn dependency:tree ->执行插件的指定目标

7.插件解析

关于插件的使用,maven插件远程仓库配置,插件仓库管理和普通依赖不同仓库

  <pluginRepositories>

    <pluginRepository>

      <id>central</id>

      <name>Maven Plugin Repository</name>

      <url>http://repo1.maven.org/maven2/</url>

      <layout>default</layout>

      <snapshots>

        <enabled>false</enabled>

      </snapshots>

      <releases>

        <updatePolicy>never</updatePolicy>

      </releases>

    </pluginRepository>

  </pluginRepositories>

<pluginGroups>

pluginGroup 插件组,插件是按照组来管理的 比如org.apache.maven.plugins是一个组,maven搜索插件的时候,插件的元数据文件是在组下保存管理的,指定用于插件查找的另一个组标识符。

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

  </pluginGroups>

插件的元数据文件位于groupId的对应路径下,maven-matedata.xml。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值