百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Maven生命周期和插件的详细介绍

bigegpt 2024-08-10 11:57 2 浏览

Maven自定义属性

pom.xml中的,properties 是 project 元素的子元素,用户可以在properties 自定义一些用户属性,然后可以在其他地方使用 ${属性名称} 这种方式进行引用。

Maven生命周期

我们开发一个项目的时候,通常有这些环节:创建项目、编写代码、清理已编译的代码、编译代码、执行单元测试、打包、集成测试、验证、部署、生成站点等,这些环节组成了项目的生命周期,这些过程也叫项目的构建过程。

maven将项目的生命周期抽象成了3套生命周期,每套生命周期又包含多个阶段,每套中具体包含哪些阶段是maven已经约定好的,但是每个阶段具体需要做什么,是用户可以自己指定的。

maven中定义的3套生命周期:

1. clean生命周期

2. default生命周期

3. site生命周期

这3套生命周期是相互独立的,没有依赖关系的,而每套生命周期中有多个阶段,每套中的多个阶段是有先后顺序的,并且后面的阶段依赖于前面的阶段,而用户可以直接使用 mvn 命令来调用这些阶段去完成项目生命周期中具体的操作,命令是:mvn 生命周期阶段。

clean生命周期

clean生命周期的目的是清理项目,它包含三个阶段:

  1. pre-clean 执行一些需要在clean之前完成的工作
  2. clean 移除所有上一次构建生成的文件
  3. post-clean 执行一些需要在clean之后立刻完成的工作

我们可以通过 mvn pre-clean 来调用clean生命周期中的 pre-clean 阶段需要执行的操作。调用 mvn post-clean 会执行上面3个阶段所有的操作,每个生命周期中的后面的阶段会依赖于前面的阶段,当执行某个阶段的时候,会先执行其前面的阶段。

default生命周期

default生命周期是maven主要的生命周期,主要被用于构建应用,包含了23个阶段:

1、validate 校验:校验项目是否正确并且所有必要的信息可以完成项目的构建过

程。

2、initialize 初始化:初始化构建状态,比如设置属性值。

3、generate-sources 生成源代码:生成包含在编译阶段中的任何源代码。

4、process-sources 处理源代码:处理源代码,比如说,过滤任意值。

5、generate-resources 生成资源文件:生成将会包含在项目包中的资源文件。

6、process-resources 编译:复制和处理资源到目标目录,为打包阶段最好准备。

7、compile 处理类文件:编译项目的源代码。

8、process-classes 处理类文件:处理编译生成的文件,比如说对Java class文件做字节码改善优化。

9、generate-test-sources 生成测试源代码:生成包含在编译阶段中的任何测试源代码。

10、process-test-sources 处理测试源代码:处理测试源代码,比如说,过滤任意值。

11、generate-test-resources 生成测试源文件:为测试创建资源文件。

12、process-test-resources 处理测试源文件:复制和处理测试资源到目标目录。

13、test-compile 编译测试源码:编译测试源代码到测试目标目录.

14、process-test-classes 处理测试类文件:处理测试源码编译生成的文件。

15、test 测试:使用合适的单元测试框架运行测试(Juint是其中之一)。

16、prepare-package 准备打包:在实际打包之前,执行任何的必要的操作为打包做准备。

17、package 打包:将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。

18、pre-integration-test 集成测试前:在执行集成测试前进行必要的动作。比如说,搭建需要的环境。

19、integration-test 集成测试:处理和部署项目到可以运行集成测试环境中。

20、post-integration-test集成测试后:在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。

21、verify 验证:运行任意的检查来验证项目包有效且达到质量标准。

22、install 安装:安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。

23、deploy 部署:将最终的项目包复制到远程仓库中与其他开发者和项目共享。

site生命周期

site生命周期的目的是建立和发布项目站点,Maven能够基于pom.xml所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。主要包含以下4个阶段:

  1. pre-site 执行一些需要在生成站点文档之前完成的工作
  2. site 生成项目的站点文档
  3. post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  4. site-deploy 将生成的站点文档部署到特定的服务器上。

mvn命令和生命周期


从命令行执行maven任务的最主要方式就是调用maven生命周期的阶段,需要注意的是,每套生命周期是相互独立的,但是每套生命周期中阶段是有前后依赖关系的,执行某个的时候,会按序先执行其前面所有的阶段。

mvn执行阶段的命令格式是:mvn 阶段1 [阶段2] [阶段n]

mvn clean:调用clean生命周期的clean阶段,实际执行的阶段为clean生命周期中的pre-clean和clean阶段。

mvn test :调用default生命周期的test阶段,实际上会从default生命周期的第一个阶段( validate )开始执行一直到 test 阶段结束。

mvn clean install :执行了两个阶段: clean 和 install ,clean 位于 clean 生命周期中, install 位于 default 生命周期中,所以这个命令会先从 clean 生命周期中的 pre-clean 阶段开始执行一直到 clean 生命周期的 clean 阶段;然后会继续从default 生命周期的 validate 阶段开始执行一直到default生命周期的 install 阶段。

mvn clean deploy:先按顺序执行 clean 生命周期的 [pre-clean,clean] 这个闭区间内所有的阶段,然后按序执行 default 生命周期的 [validate,deploy] 这个闭区间内的所有阶段(也就是default 生命周期中的所有阶段)。这个命令内部包含了清理上次构建的结果、编译代码、运行单元测试、打包、将打好的包安装到本地仓库、将打好的包发布到私服仓库。

Maven插件

maven插件主要是为maven中生命周期中的阶段服务的,maven中只是定义了3套生命周期,以及每套生命周期中有哪些阶段,具体每个阶段中执行什么操作,完全是交给插件去干。

插件可以通过 mvn 命令的方式调用直接运行,或者将插件和maven生命周期的阶段进行绑定,然后通过 mvn 阶段 的方式执行阶段的时候,会自动执行和这些阶段绑定的插件。

插件目标

maven中的插件以jar的方式存在于仓库中,通过坐标进行访问,每个插件中可能为了代码可以重用,一个插件可能包含了多个功能。插件中的每个功能就叫做插件的目标(Plugin Goal),每个插件中可能包含一个或者多个插件目标(Plugin Goal)。

1、目标参数

插件目标是用来执行任务的,那么执行任务肯定是有参数配的,这些就是目标的参数,每个插件目标对应于java中的一个类,参数就对应于这个类中的属性。

2、列出插件的所有目标:

  • mvn 插件goupId:插件artifactId[:插件version]:help
  • mvn 插件前缀:help

3、查看插件目标参数列表

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

4、命令行运行插件

  • mvn 插件goupId:插件artifactId[:插件version]:插件目标 [-D目标参数1] [-D目标参数2] [-D目标参数n]
  • mvn 插件前缀:插件目标 [-D目标参数1] [-D目标参数2] [-D目标参数n]


5、插件传参可以通过 -D 后面跟用户属性的方式给用户传参,还可以在pom.xml中

properties 的用户自定义属性中进行配置:如<maven.test.skip>true</maven.test.skip>。

6、获取插件目标详细描述信息

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

这个命令调用的是help插件的 describe 这个目标,这个目标可以列出其他指定插件目标的详细信息。也可以试试其他插件目标的详细信息。

插件前缀

运行插件的时候,可以通过指定插件坐标的方式运行。maven中给插件定义了一些简捷的插件前缀,可以通过插件前缀来运行指定的插件。

可以通过下面命令查看到插件的前缀:mvn help:describe -Dplugin=插件goupId:插件artifactId[:插件version]

插件和生命周期阶段绑定

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

maven内置插件以及绑定

1、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-compiler-plugin:testCompile 编译测试代码至测试输出目录
  • test maven-surefile-plugin:test 执行测试用例
  • package maven-jar-plugin:jar 创建项目jar包
  • install maven-install-plugin:install 将输出构件安装到本地仓库
  • deploy maven-deploy-plugin:deploy 将输出的构件部署到远程仓库
  • site maven-site-plugin:site
  • site-deploy maven-site-plugin:deploy

自定义绑定

举例:创建项目的源码jar包,将其安装到仓库中

插件 maven-source-plugin 的 jar-no-fork 可以帮助我们完成该任务,我们将这个目标绑定在default 生命周期的 verify 阶段上面。在pom.xml中配置如下:

<build>

  <plugins>

    <plugin>

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

      <artifactId>maven-source-plugin</artifactId>

      <version>3.2.0</version>

      <executions>

        <!-- 使用插件需要执行的任务 -->

        <execution>

          <!-- 任务id -->

          <id>attach-source</id>

          <!-- 任务中插件的目标,可以指定多个 -->

          <goals>

            <goal>jar-no-fork</goal>

          </goals>

          <!-- 绑定的阶段 -->

          <phase>verify</phase>

        </execution>

      </executions>

    </plugin>

  </plugins>

</build>

运行命令:mvn install

POM.xml插件配置详解

插件目标共享参数配置

build->plugins->plugin 中配置:

<!-- 插件参数配置,对插件中所有的目标起效 -->

<configuration>

  <目标参数名>参数值</目标参数名>

</configuration>

configuration 节点下配置目标参数的值,节点名称为目标的参数名称,上面这种配置对当前插件的所有目标起效,也就是说这个插件中所有的目标共享此参数配置。

插件目标参数配置

project->build->plugins->plugin->executions->execution 元素中进行配置,如下:

<!-- 这个地方配置只对当前任务有效 -->

<configuration>

  <目标参数名>参数值</目标参数名>

</configuration>

这种配置常用于自定义插件绑定,只对当前任务有效。

更多maven插件的帮助文档可以参考maven的官方网站,上面有详细的介绍,建议大家去看看。

插件解析机制

  • 插件仓库配置

插件构件也是基于坐标存储在maven仓库中。插件仓库是在pluginRepositories->pluginRepository 元素中配置的,如下:

<pluginRepositories>

  <pluginRepository>

    <id>myplugin-repository</id>

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

    <releases>

      <enabled>true</enabled>

    </releases>

  </pluginRepository>

</pluginRepositories>
  • 插件的默认groupId,在pom.xml中配置插件的时候,如果是官方的插件,可以省略 groupId 。如maven-compiler-plugin ,这个插件是编译代码的,是maven官方提供的插件,我们可以省略了groupId。如下:
<plugins>

      <plugin>

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

        <version>3.1</version>

        <configuration>

          <compilerVersion>1.8</compilerVersion>

          <source>1.8</source>

          <target>1.8</target>

        </configuration>

      </plugin>

    </plugins>
  • 插件前缀的解析

使用mvn命令调用插件的时候,可以使用插件的前缀来代替繁琐的插件坐标的方式。

插件前缀与插件groupId:artifactId是一一对应的关系,这个关系的配置存储在仓库的元数据中,元数据位于下面2个xml中:

  • ~/.m2/repository/org/apache/maven/plugins/maven-metadata-central.xml
  • ~/.m2/repository/org/codehaus/mojo/maven-metadata-central.xml

相关推荐

10w qps缓存数据库——Redis(redis缓存调优)

一、Redis数据库介绍:Redis:非关系型缓存数据库nosql:非关系型数据库没有表,没有表与表之间的关系,更不存在外键存储数据的形式为key:values的形式c语言写的服务(监听端口),用来存...

Redis系列专题4--Redis配置参数详解

本文基于windowsX64,3.2.100版本讲解,不同版本默认配置参数不同在Redis中,Redis的根目录中有一个配置文件(redis.conf,windows下为redis.windows....

开源一夏 | 23 张图,4500 字从入门到精通解释 Redis

redis是目前出场率最高的NoSQL数据库,同时也是一个开源的数据结构存储系统,在缓存、数据库、消息处理等场景使用的非常多,本文瑞哥就带着大家用一篇文章入门这个强大的开源数据库——Redis。...

redis的简单与集群搭建(redis建立集群)

Redis是什么?是开源免费用c语言编写的单线程高性能的(key-value形式)内存数据库,基于内存运行并支持持久化的nosql数据库作用主要用来做缓存,单不仅仅是做缓存,比如:redis的计数器生...

推荐几个好用Redis图形化客户端工具

RedisPlushttps://gitee.com/MaxBill/RedisPlusRedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件,支持Windows、Linux...

关于Redis在windows上运行及fork函数问题

Redis在将数据库进行持久化操作时,需要fork一个进程,但是windows并不支持fork,导致在持久化操作期间,Redis必须阻塞所有的客户端直至持久化操作完成。微软的一些工程师花费时间在解决在...

你必须懂的Redis十大应用场景(redis常见应用场景)

Redis作为一款高性能的键值存储数据库,在互联网业务中有着广泛的应用。今天,我们就来详细盘点一下Redis的十大常用业务场景,并附上Golang的示例代码和简图,帮助大家更好地理解和应用Redis。...

极简Redis配置(redis的配置)

一、概述Redis的配置文件位于Redis安装目录下,文件名为redis.conf(Windows名为redis.windows.conf,linux下的是redis.conf)你可以通过C...

什么是redis,怎么启动及如何压测

从今天起咱们一起来学习一下关于“redis监控与调优”的内容。一、Redis介绍Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。...

一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI

介绍P3XRedisUI这是一个非常实用的RedisGUI,提供响应式WebUI访问或作为桌面应用程序使用,桌面端是跨平台的,而且完美支持中文界面。Githubhttps://github....

windows系统的服务器快速部署java项目环境地址

1、mysql:https://dev.mysql.com/downloads/mysql/(msi安装包)2、redis:https://github.com/tporadowski/redis/r...

window11 下 redis 下载与安装(windows安装redis客户端)

#热爱编程是一种怎样的体验#window11下redis下载与安装1)各个版本redis下载(windows)https://github.com/MicrosoftArchive/r...

一款轻量级的Redis客户端工具,贼好用!

使用命令行来操作Redis是一件非常麻烦的事情,我们一般会选用客户端工具来操作Redis。今天给大家分享一款好用的Redis客户端工具TinyRDM,它的界面清新又优雅,希望对大家有所帮助!简介Ti...

一个.NET开发且功能强大的Windows远程控制系统

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍SiMayRemoteMonitorOS是一个基于Windows的远程控制系统,完...

Redis客户端工具详解(4款主流工具)

大家好,我是mikechen。Redis是大型架构的基石,也是大厂最爱考察内容,今天就给大家重点详解4款Redis工具@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集...