我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

这篇文章主要介绍“SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决”,在日常操作中,相信很多人在SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、Maven生命周期、阶段、目标         

 之前一直对Maven的3套生命周期有点不清楚,记录下自己的理解。
        生命周期,就是一个事物从初始到消亡、开始到结束的过程,而Maven的生命周期就是指Maven官方对项目执行Maven构建从开始使用到使用结束整个流程的定义。
        而所说的Mavn有3套生命周期,就是指Maven从开始使用到使用结束要经过3个生命周期的流程,这3个生命周期各自独立的,依次经过的生命周期分别是 clean、default、site,每个生命周期流程中也包含了不同的 phase(或者称作阶段),这些阶段也是有先后顺序的。可以说3套生命周期就是对这些阶段做的一个逻辑上划分、分类。

  • clean生命周期:因为项目如果是已经有部署过的话,我们肯定是要先把已经编译生成好的文件,要先清除掉。

  • default生命周期:然后执行一些测试、编译等步骤,default才是我们的重点,也是包含了最多的阶段。

  • site生命周期:最终发布到服务器上。        

        这样最终就形成了3套生命周期。当然以上的生命周期、阶段其实都是Maven官方自己所定义的一些逻辑上Maven项目应该经过的流程,并不一定每个项目都会经过这些所有的流程。而且用户可以通过自定义插件的方式,来将插件绑定到各个阶段,当我们在Maven执行命令的时候,就会执行自定义的特殊业务。
        比如对于spring-boot-maven-plugin,这个插件,我们使用这个插件的时候可以自定义该插件的phase为pre-clean。

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

         mvn执行阶段的命令格式是:mvn 阶段1 [阶段2] [阶段n]。那么当执行mvn pre-clean命令,就会执行pre-clean阶段的流程,该流程在maven官方应该是没有执行任务逻辑的。我们可以对比下对一个项目执行pre-clean和clean的差别:只有clean的时候才多了实执行的delete的操作。

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

        但是我们设置了这个<phase>pre-clean</phase>绑定后,我们执行pre-clean命令,自然就会执行到spring-boot-maven-plugin这个插件的逻辑。这里只是为了演示有绑定了pre-clean阶段的动作,实际项目上是不应该绑定到pre-clean阶段上的。

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

         并且在一个阶段上也可以指定不同的goal/目标(可以称之为这个插件所提供的功能),一个插件可以提供多种不同的goal/目标/功能,在IDEA的Maven控制面板上打开该pom项目,可以看到这个spring-boot插件就是包含了这些目标:build-info、help、repackage、run、start、stop。

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

        而我们上面配置了<goal>repackage</goal>,意味着在执行pre-clean阶段的时候,会实际执行到该插件的repackage这个目标。可以看到执行mvn pre-clean的结果,这个就是执行了repackage目标。在执行mvn命令可以指定要执行的目标,所以上面相当于执行了:mvn pre-clean:repackage

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

         在clean这个生命周期中,Maven总共定义了三个阶段,分别是:pre-clean、clean、post-clean,各个阶段有先后顺序,执行某个阶段的时候会有序执行其前面的所有阶段。比如执行mvn post-clean,则依次执行pre-clean、clean、post-clean。可以看到当我们执行mvn post-clean的时候,也会出现了上面那样pre-clean时的错误

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

         当我们在使用该插件的时候,没有定义phase的话,会自动使用其插件定义的时候用的defaultPhase。比如我们使用的spring-boot-maven-plugin没有配置phase,则默认的phase是插件源码RepackageMojo在@Mojo定义的参数defaultPhase,也就是package阶段了。所以我们只要增加了goal的配置,即使没有配置pahse,也可以在package阶段直接打包了

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

 二、SpringCloud下spring-boot-maven-plugin插件的打包的问题

        在SpringCloud项目中的spring-boot-maven-plugin配置如下:

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

         当我们直接在SpringCloud项目下,对各个微服务子项目直接用命令mvn clean package打包会发现最终打出来的jar包并非可执行jar包,而只是我们项目源文件的普通jar包。

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

         正确的打包命令应该是mvn clean package spring-boot:repackage,打包结果如下图。其中.original结尾的文件,就是项目源代码最初的jar包,然后springboot打包插件再根据该jar包再生成最终的可执行jar包。

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

三、SpringCloud正确的打包方式

        为什么SpringCloud工程打可执行jar的命令是:mvn clean package spring-boot:repackage,而那些继承了spring-boot-starter-parent的项目可以直接通过mvn clean package就可以打可执行jar包?

        这是因为在spring-boot-starter-parent的项目里已经帮我们将打包插件绑定到了repackage的目标,而该插件如上文所提到的,已经默认绑定到了package的阶段,所以当我们在SpringBoot项目执行mvn clean package的时候其实就自动执行了打普通jar包、并且通过repackage最终打成可执行jar包的流程。

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

         所以如果我们的SpringCloud想要也能够像SpringBoot那样执行打包命令的话,可以在SpringCloud的父pom工程也定义好plugin的repackage目标:

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

         这样在子工程执行package后,就可以发现已经可以自动执行打普通jar包的目标了,接着继续执行repackage目标,最终就是我们所要的可执行jar包。

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

         如果只是单独执行mvn spring-boot:repackage,会报错:Source file must be provided。需要先package 与 spring-boot:repackage 在同一条命令执行才正确,可能插件内部是在通过本次命令执行中,根据package打出来的普通jar包的基础上进行repackage的,不会去获取仓库中已有的普通jar包。

到此,关于“SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决

这篇文章主要介绍“SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决”,在日常操作中,相信很多人在SpringCloud下spring-boot-maven-plugin插件的打包问题怎么解决问题
2023-07-05

spring-boot-maven-plugin打包时排除provided依赖问题怎么解决

这篇文章主要介绍了spring-boot-maven-plugin打包时排除provided依赖问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇spring-boot-maven-plugin打包时排
2023-07-06

通过spring-boot-maven-plugin package失败问题怎么解决

这篇文章主要介绍“通过spring-boot-maven-plugin package失败问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“通过spring-boot-maven-plugi
2023-07-06

spring-boot-maven-plugin未指定版本导致的编译错误问题怎么解决

本篇内容主要讲解“spring-boot-maven-plugin未指定版本导致的编译错误问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“spring-boot-maven-plugi
2023-07-06

怎么解决maven没有打包xml文件的问题

本篇内容介绍了“怎么解决maven没有打包xml文件的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!maven没有打包xml文件的问题最
2023-06-25

screw Maven插件方式运行时在编译打包时跳过执行的问题如何解决

今天小编给大家分享一下screw Maven插件方式运行时在编译打包时跳过执行的问题如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起
2023-07-05

screw Maven插件方式运行时在编译打包时跳过执行的问题解决方法

这篇文章主要介绍了screw Maven插件方式运行时在编译打包时跳过执行的问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-03-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录