当前位置: 首页 > news >正文

SpringBoot多级多模块聚合项目下maven打包报‘packaging‘ with value ‘jar‘ is invalid.

问题场景:

SpringBoot多级多模块项目中部分pom文件报红,mvn clean时报错:‘packaging’ with value ‘jar’ is invalid. Aggregator projects require ‘pom’ as packaging.


项目背景

项目是一个多级多模块项目,简单分为:1-2-3三级项目,2是1的子项目,3是2的子项目,这些在pom配置文件中都有说明:

  1. 1、2的pom文件中有通过modules标签去指向包含的子项目
  2. 2、3的pom没有使用parent标签去指向其父项目,都是直接指向spring-boot-starter-parent

原因分析:

通过报错提示可以得知:值为“jar”的“packaging”无效。聚合器项目需要“pom”作为包装。此时我做了几个动作去排查:

  1. 因为是第二级项目中的pom文件异常,所以我此时查看的是第一级项目中的pom文件配置,不过通过pom.xml文件可以得知第一级项目中已经配置了打包的配置文件是pom。
  2. 怀疑是parent标签指向的spring-boot-starter-parent的默认打包方式不对,但是查看之后发现也是对的。
  3. 重新编译,使用clean标签,报错。
  4. 查了一下百度,确实是只需要在pom文件中指定打包方式是pom就可以了,后来发觉估计是因为是多级项目导致,因为之前一级项目下的其他二级子模块并没有自己的第三级子模块,所以没有这个问题。

根本原因

在 Maven 项目中,如果没有在 pom.xml 文件中显式指定打包方式(packaging),Maven 会根据项目的类型自动选择一个默认值。对于普通的 Maven 项目(非聚合项目),默认的打包方式是 jar,因为大多数 Java 项目最终都会生成一个 JAR 文件作为输出工件。

这个默认值是在 Maven 的核心逻辑中硬编码的,不是在一个特定的配置文件或属性中指定的。Maven 在解析 pom.xml 文件并构建项目时,会检查是否设置了 标签。如果没有设置,Maven 就会使用默认的打包方式 jar。

对于聚合项目(aggregator project),情况则有所不同。聚合项目本身不产生输出工件,而是用来管理和构建一组子模块。因此,对于聚合项目,必须在 pom.xml 文件中显式设置 pom,以指定其为聚合项目。如果不这样做,而尝试使用默认的 jar 打包方式,就会导致上述异常。

总之,Maven 项目默认的打包方式 jar 是由 Maven 的内部逻辑决定的,而不是在某个配置文件或属性中指定的。而对于聚合项目,则必须在 pom.xml 中显式设置打包方式为 pom。


解决方案:

在存在三级子模块的二级子模块下指定打包格式是pom即可。

<packaging>pom</packaging>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 图书馆自助借书机怎么借书
  • Bash相关
  • Mysql安装(命令方式安装)
  • 基于深度学习的电动自行车头盔佩戴检测系统
  • 06-User Login
  • 一文搞懂从爬楼梯到最小花费(力扣70,746)
  • 语义分割交互式智能标注工具 | 澳鹏数据标注平台
  • LangChain - OpenGPTs
  • GO - 泛型编程
  • 深入浅出 -- 系统架构之负载均衡Nginx实现高可用
  • 面试算法-148-轮转数组
  • Chatgpt掘金之旅—有爱AI商业实战篇|内容策展业务|(八)
  • Springboot中JSCH的使用
  • RabbitMQ面经 手敲浓缩版
  • iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑
  • .pyc 想到的一些问题
  • 《Java编程思想》读书笔记-对象导论
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JS题目及答案整理
  • node和express搭建代理服务器(源码)
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 大数据与云计算学习:数据分析(二)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 温故知新之javascript面向对象
  • 优化 Vue 项目编译文件大小
  • 在Unity中实现一个简单的消息管理器
  • - 转 Ext2.0 form使用实例
  • 《天龙八部3D》Unity技术方案揭秘
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • ## 基础知识
  • #1014 : Trie树
  • #Linux(帮助手册)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #Z0458. 树的中心2
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (2)(2.10) LTM telemetry
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)鸿鹄云架构一服务注册中心
  • (算法)前K大的和
  • .bat批处理出现中文乱码的情况
  • .config、Kconfig、***_defconfig之间的关系和工作原理
  • .net core 依赖注入的基本用发
  • .net 连接达梦数据库开发环境部署
  • .NET应用UI框架DevExpress XAF v24.1 - 可用性进一步增强