IDEA 中 maven 的 Lifecycle 和Plugins 的区别

目录
  • IDEA maven 的 Lifecycle 与 Plugins
    • 生命周期(Lifecycle)
    • 阶段(Phase)
    • 插件(plugin)和目标(goal)
  • 补充:idea中maven的Plugins和 Lifecycle 区别

IDEA maven 的 Lifecycle 与 Plugins

IDEA 主界面右侧 Maven 标签栏有同样的命令,比如 install,既在 Plugins 中存在,也在 Lifecycle中存在。到底选哪个?二者又有什么区别呢?

经过实验,很多时候都是 Plugins中的命令报错,而 Lifecycle 中的命令正常执行。那么是不是说 Plugins 根本就没有必要存在?存在了还混淆视听?

要解答这个问题,首先要了解这两处的命令到底有什么差异。而之前,要先了解 Maven 的生命周期、阶段、插件和目标之间的关系。

生命周期(Lifecycle)

Maven 的生命周期就是对所有构建过程进行抽象和统一,包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成等几乎所有的构建步骤。

Maven 内置的三套生命周期:

  • Clean Lifecycle:做一些清理工作

    • pre-clean --> clean --> post-clean
  • Default LifeCycle:构建的核心部分、编译、测试、打包、部署等
    • validate --> compile --> test --> package --> integration-test --> verify --> install --> deploy
  • Site Lifecycle:生成项目报告、站点、发布站点
    • pre-site --> site --> post-site --> site-deploy

阶段(Phase)

每套生命周期都是一组阶段组成。

更多请参考官方文档:https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

Clean Lifecycle

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

Default Lifecycle

  • 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

Site Lifecycle

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

特点:阶段在生命周期内具有顺序性,在执行生命周期中某个阶段时会先按顺序执行本生命周期当前阶段之前的所有阶段,再执行当前阶段。

例如,Clean Lifecycle有 3 个阶段,按顺序依次为:

  • pre-clean
  • clean
  • post-clean

则若执行命令 mvn clean 实际按顺序执行了 Clean Lifecyclepre-cleanclean

  • 那么如果只想执行第 2 个阶段呢,那就执行命令 mvn clean:clean(这就是下面要提到的插件:目标的执行方式了)

插件(plugin)和目标(goal)

一个阶段由插件与目标组成。

可以理解为:

  • 一个阶段:一个步骤
  • 插件:打成 jar 包的 java 程序
  • 目标:插件程序的一个执行参数

即向插件程序传入一个执行参数并执行一次该插件程序,就等于进行了一个步骤。

例子:

mvn compiler:compile

compiler 是插件,compile 是目标,compiler:compile是一个阶段。

插件:目标 表示一个特定任务,阶段是生命周期中的特定步骤。

有些阶段声明绑定的插件:目标(即通过执行相应的插件:目标来实现),有些阶段没有声明绑定的插件:目标,是通过其他方式来实现的。

生命周期及包含阶段,阶段声明绑定的插件:目标如下:

1.Clean Lifecycle

顺序 阶段 插件:目标
1 pre-clean
2 clean clean:clean
3 post-clean

2.Default Lifecycle

顺序 阶段 插件:目标
1 validate
2 initialize
3 generate-sources
4 process-sources
5 generate-resources
6 process-resources resources:resources
7 compile compiler:compile
8 process-classes
9 generate-test-sources
10 process-test-sources
11 generate-test-resources
12 process-test-resources resources:testResources
13 test-compile compiler:testCompile
14 process-test-classes
15 test surefire:test
16 prepare-package
17 package
18 pre-integration-test
19 integration-test
20 post-integration-test
21 verify
22 install install:install
23 deploy deploy:deploy

3.Site Lifecycle

顺序 阶段 插件:目标
1 pre-site
2 site site:site
3 post-site
4 site-deploy site:deploy

在 IDEA 中使用 Lifecycle 下的 install (等价于在命令行执行 mvn install),代表执行的是 生命周期 的一个阶段(会自动先执行之前的所有阶段)。

如上所示,install 阶段前有 21 个阶段,即 mvn install 会先执行前面的 21 个阶段,之后再执行 install 这个阶段。

而作为对比,IDEA 中使用 Plugin 下的 install(等价于在命令行执行 mvn install:install),代表执行的是 插件:目标,它单独执行,不会先去执行之前的 21 个阶段。

另外,由于 生命周期 可以和 插件:目标 一起执行,所以可以先执行 verify 生命周期(执行 1~21 阶段),再执行 install:install(第 22 阶段)。所以以下两种写法其实最终实现效果是等价的。

mvn install
mvn verify install:install

参考资料:

https://blog.csdn.net/gao_zhennan/article/details/89713407

https://www.cnblogs.com/zhaiqianfeng/p/4620138.html

补充:idea中maven的Plugins和 Lifecycle 区别

如果在Plugins里面安装会出现问题,因为Plugins安装,只会执行安装操作,而maven生命周期安装之前的操作都不会执行 ,就会安装失败。但是使用 Lifecycle中的install的话,在执行instal生命阶段之前的说有生命周期阶段,包括(clean compiler test package)

到此这篇关于IDEA 中 maven 的 Lifecycle 和Plugins 的区别的文章就介绍到这了,更多相关maven 的 Lifecycle 和Plugins区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring Boot结合IDEA自带Maven插件如何快速切换profile

    目录 一.前言 二.配置详情 2.1 pom.xml修改 2.2 bootstrap.yml/application.yml修改 一.前言 IDEA是目前 Java 开发者中使用最多的开发工具,它有着简约的设计风格,强大的集成工具,便利的快捷键. 在项目项目整个开发运维周期中,我们的的项目往往需要根据不同的环境,使用不同的文件配置. 比如以下部分: 默认:application.properties/yml 共用配置:application-common.properties/yml 开发环境:

  • 下载远程maven仓库的jar 手动放到本地仓库详细操作

    目录 如何下载远程maven仓库的jar 手动放到本地仓库? 简单步骤描述: 详细步骤描述: 如何下载远程maven仓库的jar 手动放到本地仓库? 在使用Maven构建Java项目时,通常会从中央仓库或其他远程仓库下载所需的依赖库.但是,有时候我们需要手动下载这些依赖库并将它们放到本地仓库,这里提供一个简单的步骤: 简单步骤描述: 可以按照以下步骤手动下载远程Maven仓库的JAR并将其放到本地仓库中: 打开Maven中央仓库网站:https://mvnrepository.com/ 在搜索框

  • Maven项目修改JDK版本全过程

    目录 1.1 打开Eclipse开发工具 2.1 配置完Eclipse和JDK 的开发环境以后 2.2 打开 Java Compiler 2.3 再打开 Project Facets, 3.1 走到这里完成还有一个地方没有配置 4.1 最后别忘了 右键项目 总结 一般来讲,项目更换JDK版本的情况比较少,但是有时难免会遇到.电脑安装不同版本的JDK这里不做介绍. 这里记录一下修改项目JDK版本要注意的几个地方. 1.1 打开Eclipse开发工具 配置JDK的安装路径 Window > Pref

  • 浅谈一下maven优缺点及使用和特点

    目录 1.什么是maven: Maven的优点: Maven的缺点: maven常见的指令: maven依赖范围: maven四大特性: 1.第一大特性: 2.第二大特性: 3.第三大特性: 4.第四大特性: 1.什么是maven: maven是Java平台下的一款项目构建和依赖管理的自动化管理工具. 项目构建:将我们的源代码.配置文件变成可执行的war包或者jar包. 依赖管理:项目需要正常运行,必须依赖一些第三方的jar包,对于这些第三方的jar包的管理,可以认为就是依赖的管理. Maven

  • maven导入本地仓库jar包,报:Could not find artifact的解决

    目录 maven导入本地仓库jar包报:Could not find artifact 1.检查本地仓库 2.接着检查idea的maven配置 3.猜测可能是因为maven会先去网上的中央仓库获取jar包 4.设置好后 5.注意离线工作后 总结 maven导入本地仓库jar包报:Could not find artifact idea使用maven导包,报错: 1.检查本地仓库 发现jar包存在: 2.接着检查idea的maven配置 确实配置了本地仓库: 3.猜测可能是因为maven会先去网上

  • Maven 项目用Assembly打包可执行jar包的方法

    目录 1.添加maven插件 2.mvn clean(清理下项目) 3.maven update project(用eclipse工具) 4.命令后执行命令mvn assembly:assembly -Dmaven.test.skip 5.执行 java -jar DataCollector.jar 该方法只可打包非spring项目的可执行jar包 1.添加maven插件 <build> <finalName>DataCollector</finalName> <

  • IDEA 中 maven 的 Lifecycle 和Plugins 的区别

    目录 IDEA maven 的 Lifecycle 与 Plugins 生命周期(Lifecycle) 阶段(Phase) 插件(plugin)和目标(goal) 补充:idea中maven的Plugins和 Lifecycle 区别 IDEA maven 的 Lifecycle 与 Plugins IDEA 主界面右侧 Maven 标签栏有同样的命令,比如 install,既在 Plugins 中存在,也在 Lifecycle中存在.到底选哪个?二者又有什么区别呢? 经过实验,很多时候都是 P

  • Spring中SmartLifecycle和Lifecycle的作用和区别

    本文基于SpringBoot 2.5.0-M2讲解Spring中Lifecycle和SmartLifecycle的作用和区别,以及如何控制SmartLifecycle的优先级. 并讲解SpringBoot中如何通过SmartLifecycle来启动/停止web容器. SmartLifecycle和Lifecycle作用 都是让开发者可以在所有的bean都创建完成(getBean) 之后执行自己的初始化工作,或者在退出时执行资源销毁工作. SmartLifecycle和Lifecycle区别 1.

  • java 中maven pom.xml文件教程详解

    maven pom.xml文件教程详解,具体内容如下所示: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.x

  • 解决MyEclipse中Maven设置jdk版本jdk1.8报错问题

    今天安装了jdk1.8.tomcat8.和maven3.5.2,弄好后在myeclipse新建了一个maven项目,项目默认是jdk1.5,如图一,我把它改成jdk1.8,项目就报错了,如图二,然后update project后又变成jdk1.5了. 图一: 图二: 解决方法: 打开maven项目的pom.xml文件, 在build节点下加入下面这段代码 ,然后在选中项目右键-->maven4myeclipse-->update project...就能更新为jdk1.8了.如图三,现在项目已

  • Java中Maven项目导出jar包配置的示例代码

    具体代码如下所示: <!-- 第一种打包方式 (maven-jar-plugin), 将依赖包和配置文件放到jar包外 --> <build> <sourceDirectory>src/main/java</sourceDirectory> <resources> <resource> <directory>src/main/resources</directory> <!-- 将<director

  • 浅谈IDEA中Maven配置问题全解决

    最近换了工作环境,以前的IDEA配置都没了,记得上次配置自己的IDEA还是在两年前?然后构建Maven项目时遇到了一些小插曲,记录下解决方案(PS:新手教程向) 1. idea中maven默认配置的坑 首先打开File->Settings 这里可以直接搜索maven,就可以进入idea的Maven配置选项. 我这里是idea默认的maven配置,可以看到默认的Maven目录是idea内置的maven插件目录,同时Maven的配置文件在操作系统的User目录下. 理论上来讲idea的默认配置这样是

  • web.xml中Maven占位符不生效问题记录分析

    目录 问题背景 问题分析 Resources插件有三个目标: 问题定位 问题解决 问题背景 开发反馈,一个spring mvc的web项目,在web.xml配置的占位符不生效,编译后还是没有替换成配置的属性,如下: <context-param> <param-name>logbackConfigLocation</param-name> <param-value>classpath:${loagback.xml.path:logback.xml}</

  • 解决IDEA中maven导入jar包一直报错问题

    查      看:   File------>Project Structure--------->Libraries如下面没有maven所引入的jar包则为该错误[1] 错误原因:  是导入的module错误,应该导入maven的module 解      决:  File------>Project Structure--------->Modules------------->选择中间项目---------->选择红色的减号(因为要重新导入module),保证现在

  • IDEA中Maven依赖下载失败的完美解决方案

    使用IDEA进行Maven项目开发时,时不时会遇到pom.xml报错的情况,其中很大概率是因为Maven依赖的jar包下载失败,找来找去也没有找到是什么问题,困扰了很多程序猿,这里给出IDEA中Maven依赖下载失败解决方案,给大家参考,实测有用. 文章目录首先检查网络有没有问题,确定网络没有问题,请看下一步多次点击重新导入Maven依赖的按钮设置自动导入Maven依赖在IDEA中找到Maven的配置文件的地址,然后检查配置的远程仓库或者镜像有没有问题如果上面几步都没有解决问题,可以使用以下脚本

  • SpringBoot中maven项目打成war包部署在liunx服务器上的方法

    说明:Spring Boot由于内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再像Spring项目还需要外置的Tomcat等容器来进行部署工作了,通过启动启动类就可以建立独立的Spring应用程序.Spring Boot部署在服务器上主要分为两种方式:一是打成jar包发布,二是打成war包发布,第一种方式只需要在该服务器中运行java -jar+部署项目的名称就可以启动(不要忘了.jar后缀名),操作比较简单,第二种方式操作比较复杂一点,并且是项目发

随机推荐