(七)maven生命周期与插件
创始人
2025-05-28 04:18:47
0

目录

maven生命周期

maven生命周期以及执行原理

maven的生命周期以及phase

默认的phase和plugin绑定

maven的命令行和生命周期

maven插件

插件和goal

将插件的goal绑定到phase上

配置插件

找到你需要的插件

插件解析


maven生命周期

  • mvn命令demo

mvn clean package:打包

mvn clean install: 安装到本地

mvn clean deploy:部署到远程私服

maven生命周期以及执行原理

  • maven生命周期,就是mvn各种命令背后的原理,就是对传统软件项目构建工作的抽象 (清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成)
  • maven有三套完全独立的生命周期

clean, default, site

每套生命周期都可以独立运行,每个生命周期的运行都会包含多个phase,每个phase又是由各种插件的goal来完成的,一个插件的goal可以认为是一个功能。

这就是maven的生命周期 -> phase(可以理解为阶段) -> 插件的关系,也是maven构建执行的核心原理

你每次执行一个生命周期,都会依次执行这个生命周期内部的多个phase,每个phase执行时都会执行某个插件的goal完成具体的功能

maven的生命周期以及phase

  • clean生命周期包含的phase
  • pre-clean
  • clean
  • post-clean
  • default生命周期包含的phase
  • validate:校验这个项目的一些配置信息是否正确
  • initialize:初始化构建状态,比如设置一些属性,或者创建一些目录
  • generate-sources:自动生成一些源代码,然后包含在项目代码中一起编译
  • process-sources:处理源代码,比如做一些占位符的替换
  • generate-resources:生成资源文件,才是干的时我说的那些事情,主要是去处理各种xml、properties那种配置文件,去做一些配置文件里面占位符的替换
  • process-resources:将资源文件拷贝到目标目录中,方便后面打包
  • compile:编译项目的源代码
  • process-classes:处理编译后的代码文件,比如对java class进行字节码增强
  • generate-test-sources:自动化生成测试代码
  • process-test-sources:处理测试代码,比如过滤一些占位符
  • generate-test-resources:生成测试用的资源文件
  • process-test-resources:拷贝测试用的资源文件到目标目录中
  • test-compile:编译测试代码
  • process-test-classes:对编译后的测试代码进行处理,比如进行字节码增强
  • test:使用单元测试框架运行测试
  • prepare-package:在打包之前进行准备工作,比如处理package的版本号
  • package:将代码进行打包,比如jar包
  • pre-integration-test:在集成测试之前进行准备工作,比如建立好需要的环境
  • integration-test:将package部署到一个环境中以运行集成测试
  • post-integration-test:在集成测试之后执行一些操作,比如清理测试环境
  • verify:对package进行一些检查来确保质量过关
  • install:将package安装到本地仓库中,这样开发人员自己在本地就可以使用了
  • deploy:将package上传到远程仓库中,这样公司内其他开发人员也可以使用了
  • site生命周期的phase
  • pre-site
  • site
  • post-site
  • site-deplo

默认的phase和plugin绑定

  • 实际上,默认maven就绑定了一些plugin goal到phase上去,比如:类似于resources:resources这种格式,说的就是resources这个plugin的resources goal(resources功能,负责处理资源文件)

process-resources                        resources:resources

compile                                           compiler:compile

process-test-resources                 resources:testResources

test-compile                                   compiler:testCompile

test                                                  surefire:test

package                                                 jar:jar或者war:war

install                                              install:install

deploy                                            deploy:deploy

  • site生命周期的默认绑定是:

site                                site:site

site-deploy                    site:deploy

  • clean生命周期的默认

clean                           clean:clean

maven的命令行和生命周期

  • 比如mvn clean package

clean是指的clean生命周期中的clean phase

package是指的default生命周期中的package phase

此时就会执行clean生命周期中,在clean phase之前的所有phase和clean phase,pre clean,clean

同时会执行default生命周期中,在package phase之前的所有phase和package phase

  • mvn clean package

但是,pre clean phase默认是没有绑定任何一个plugin goal的,所以默认什么也不会干;

clean phase默认是绑定了clean:clean,clean plugin的clean goal,所以就会去执行clean插件的clean goal,就会实现一个功能,就是清理target目录下的文件

process-resources                        resources:resources

compile                                         compiler:compile

process-test-resources                 resources:testResources

test-compile                                  compiler:testCompile

test                                                surefire:test

package                                        jar:jar或者war:war

install                                            install:install

deploy                                          deploy:deploy

  • mvn dependency:tree      mvn deploy:deploy-file

就是不执行任何一个生命周期的任何一个phase

直接执行指定的插件的一个goal

比如mvn dependency:tree,就是直接执行dependency这个插件的tree这个goal,这个意思就是会自动分析pom.xml里面的依赖声明,递归解析所有的依赖,然后打印出一颗依赖树

mvn deploy:depoy-file,就是直接执行deploy这个插件的deploy-file这个goal,这个意思就是说将指定目录的jar包,以指定的坐标,部署到指标的maven私服仓库里去,同时使用指定仓库id对应的server的账号和密码。

maven插件

插件和goal

  • 每个插件都有多个goal,每个goal都是一个具体的功能

dependency插件有十几个goal,可以进行分析项目依赖,列出依赖树,等等

插件的goal,写法就是plugin:goal,比如dependency:tree

用mvn dependency:tree,就可以手动执行某个插件的goal,执行某种功能

将插件的goal绑定到phase上

  • maven内置就会绑定一些插件的goal到phase上,我们如果要使用某个maven插件,如何手动将插件的goal绑定到phase上
  • 比如将source插件的jar-no-fork goal绑定到verify phase,在完成集成测试之后,就生成源码的jar包,这里可以看到绑定plugin的语法:

      

             

                     org.apache.maven.plugins

                     maven-source-plugin

                     2.1.1

                    

                           

                                   attach-sources

                                   verify

                                  

                                          jar-no-fork

                                  

                           

                    

             

      

运行mvn verify,就可以看到生成了一个包含源码的jar包

即使不配置绑定的phase也可以,因为大多数插件都默认内置了要绑定的phase,比如这个插件就内置绑定在package phase。

配置插件

如果在命令行执行插件,可以用-Dkey=value来进行插件的设置

比如mvn install -Dmaven.test.skip=true,就是surefire插件在测试的时候提供的参数,设置为true就会跳过测试

此外也可以在pom.xml中用来配置

      

             

                     org.apache.maven.plugins

                     maven-compiler-plugin

                     2.1

                    

                            1.5

                            1.5

                    

             

      

找到你需要的插件

在http://maven.apache.org/plugins/index.html中可以找到所有的插件,里面有文档

你可以百度搜索,用maven启动jetty插件,用maven部署tomcat插件

插件解析

先从本地仓库找插件,没有则从远程仓库找插件

插件的远程仓库也需要配置,maven默认配置了远程的插件仓库

      

              central

              Maven Plugin Repository

              http://repo1.maven.org/maven2

              default

             

                     false

             

             

                     never

             

      

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...