jar运行报错Unable to read meta-data for class

news2024/11/15 11:08:29

目录

一、场景描述

二、解决办法

1)情况一

2)情况二


贴一下部署报错堆栈信息:

java.lang.IllegalStateException: Unable to read meta-data for class com.zhh.zhhd.biz.config.Test1Config
        at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.getAnnotationMetadata(AutoConfigurationSorter.java:233) ~[spring-boot-autoconfigure-2.3.12.RELEASE.jar!/:2.3.12.RELEASE]
        at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.getOrder(AutoConfigurationSorter.java:204) ~[spring-boot-autoconfigure-2.3.12.RELEASE.jar!/:2.3.12.RELEASE]
        at org.springframework.boot.autoconfigure.AutoConfigurationSorter$AutoConfigurationClass.access$000(AutoConfigurationSorter.java:150) ~[spring-boot-autoconfigure-2.3.12.RELEASE.jar!/:2.3.12.RELEASE]
        at org.springframework.boot.autoconfigure.AutoConfigurationSorter.lambda$getInPriorityOrder$0(AutoConfigurationSorter.java:64) ~[spring-boot-autoconfigure-2.3.12.RELEASE.jar!/:2.3.12.RELEASE]
        at java.util.TimSort.countRunAndMakeAscending(Unknown Source) ~[na:1.8.0_333]
        at java.util.TimSort.sort(Unknown Source) ~[na:1.8.0_333]
        at java.util.Arrays.sort(Unknown Source) ~[na:1.8.0_333]
        at java.util.ArrayList.sort(Unknown Source) ~[na:1.8.0_333]

一、场景描述

这是一个SpringBoot maven的多模块项目,在子模块中写了一个配置类,正常情况下,项目启动的时候是可以扫描到我写的这个配置类并且把相关的bean注入到spring的容器中,但是为了这个子模块打包后能给其他的项目使用,就在子模块中使用了spring.factories 配置;

目录结构截图:

spring.factories文件内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zhh.zhhd.biz.config.Test1Config

项目启动的时候回去读取spring.factories文件,然后加载文件中配置的配置类。

重点来了

项目在idea中运行没有任何问题,但是打包部署后就报错了,报错:java.lang.IllegalStateException: Unable to read meta-data for class com.zhh.zhhd.biz.config.Test1Config

也就是说他读取了spring.factories文件,但是没有找到文件中配置的配置类,后来发现子模块打包后的目录结构有问题:

然后发现是spring-boot-maven-plugin这个打包插件导致打包多了ROOT-INF目录。

二、解决办法

1)情况一

如果子模块的pom文件中使用了spring-boot-maven-plugin这个插件,那么就在配置项中加上标签 :<skip>true</skip>

            <plugin>
                <!-- 打包插件 -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- 不设置skip为false:打包的时候生成的jar包结构如下:BOOT-INF下包括了项目结构包和lib(依赖的代码jar包),
                    最外层还有一个启动加载器类包,主要用在需求执行(运行)的jar,如果打包是一个依赖包,不需要单独运行,
                    就设置 <skip>true</skip>.如果是一个需要启动运行的jar,就不需要添加<skip>,或者设置<skip>为false。
                     -->
                     -->
                    <skip>true</skip>
                </configuration>
            </plugin>

说明一下:设置skip为false:打包的时候生成的jar包结构如下:BOOT-INF下包括了项目结构包和lib(依赖的代码jar包),最外层还有一个启动加载器类包,主要用在需求执行(运行)的jar,如果打包是一个依赖包,不需要单独运行,就设置 <skip>true</skip>,如果是一个需要启动运行的jar,就不需要添加<skip>,或者设置<skip>为false。

2)情况二

如果子模块中的pom文件中没有配置spring-boot-maven-plugin这个插件,那么大概率是项目的最外层pom(父模块)配置了spring-boot-maven-plugin,子模块就继承了父模块,也相当于用了spring-boot-maven-plugin这个插件。

解决方式1
        在子模块中配置上spring-boot-maven-plugin,并且加上<skip>true</skip>标签,这样就能覆盖从父pom中继承过来的spring-boot-maven-plugin

解决方式2

      父模块的pom中去掉spring-boot-maven-plugin配置,然后把spring-boot-maven-plugin在主模块中配置,主模块就是打包后需要运行的那个模块,有启动类(@SpringBootApplication)的那个模块,这时候就不要加 <skip>true</skip>,或者设置skip为false。

问题解决!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1515779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

goland设置保存文件时不将4个空格转为TAB

goland设置保存文件时不将4个空格转为TAB 版本&#xff1a;GoLand 2022.3 设置路径&#xff1a; Settings -> Editor -> Code Style -> Go -> Run gofmt图示&#xff1a;

无缝集成 MongoDB Relational Migrator,Tapdata 提供关系型到 MongoDB 实时迁移优化方案

在去年的 MongoDB 用户大会纽约站上&#xff0c;MongoDB 正式宣布全面推出新工具 MongoDB Relational Migrator&#xff08;MongoDB RM&#xff09;&#xff0c;用以简化应用程序迁移和转换——即从传统关系型数据模型到现代的文档数据模型&#xff0c;助力组织快速提升运营效率…

opencv dnn模块 示例(25) 目标检测 object_detection 之 yolov9

文章目录 1、YOLOv9 介绍2、测试2.1、官方Python测试2.1.1、正确的脚本2.2、Opencv dnn测试2.2.1、导出onnx模型2.2.2、c测试代码 2.3、测试统计 3、自定义数据及训练3.1、准备工作3.2、训练3.3、模型重参数化 1、YOLOv9 介绍 YOLOv9 是 YOLOv7 研究团队推出的最新目标检测网络…

手撕快速排序

定义 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法. 其基本思想为:任取待排序的某个元素作为基准值,按照该排序码将待排序集合分割成两个子序列, 左子序列中所有元素均小于基准值,右子序列均大于基准值,然后左右子序列重复该过程,知道所有元素都有序为止. (核心…

投后管理系统的功能模块

投后管理系统的技术难点可能包括以下几个方面&#xff0c;这些技术难点需要综合考虑&#xff0c;并结合具体的业务需求和技术实现&#xff0c;才能构建出高效、安全、稳定的投后管理系统。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作…

【Python】成功解决NameError: name ‘sns‘ is not defined

【Python】成功解决NameError: name ‘sns’ is not defined &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您…

基于Java (spring-boot)的毕业作品管理系统

一、项目介绍 管理员管理设计题目&#xff0c;投票记录&#xff0c;选题信息以及公告。 教师对设计题目进行投票&#xff0c;审核并管理用户选题信息。 用户选择设计题目&#xff0c;查看选题审核状态&#xff0c;管理选题信息。 二、作品包含 三、项目技术 后端语言&#xff1…

一体式以电折水智能终端:化繁为简,智能八合一

一体式以电折水智能终端通过高度集成化设计&#xff0c;巧妙融合了空气开关、开关电源、隔离变压器、接触器、智能电表、RTU、4G通信模块、定位模块等八大核心功能&#xff0c;不仅展现了经济高效和智能运维的双重优势&#xff0c;更以其超强的安全防护能力确保了使用的高度安全…

maven打包把所有依赖的jar copy到一个文件夹

在maven项目中&#xff0c;是使用依赖坐标来引入jar包&#xff0c;在引入jar包的时候&#xff0c;maven也会默默的帮助我们导入这个jar包所依赖的jar包。 但是当我们打包项目使用jar包运行的时候&#xff0c;往往会出现缺少jar的情况&#xff1a; 如果我们一个一个添加缺少的…

对比学习(Contrastive Learning)和孪生网络(Siamese Network)的区别!

对比学习&#xff08;Contrastive Learning&#xff09;和孪生网络&#xff08;Siamese Network&#xff09;是两种常见的无监督学习方法&#xff0c;它们有着不同的原理和应用场景。 原理与目标&#xff1a; 对比学习旨在通过最小化相似样本对之间的距离&#xff0c;最大化不相…

西井科技参与IATA全球货运大会 以AI绿动能引领智慧空港新未来

3月12日至14日&#xff0c;由国际航空运输协会IATA主办的全球货运大会&#xff08;World Cargo Symposium&#xff09;在中国香港成功举办&#xff0c;这是全球航空货运领域最大规模与影响力的年度盛会。作为大物流领域全球领先的“智能化与新能源化”综合解决方案提供商&#…

从零开始写 Docker(六)---实现 mydocker run -v 支持数据卷挂载

本文为从零开始写 Docker 系列第六篇&#xff0c;实现类似 docker -v 的功能&#xff0c;通过挂载数据卷将容器中部分数据持久化到宿主机。 完整代码见&#xff1a;https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识&#xff1a; …

[C++]20.实现红黑树。

实现红黑树 一.基本概念&#xff1a;1.红黑树的概念&#xff1a;2.红黑树的性质&#xff1a; 二.实现红黑树&#xff1a;1.基本结构&#xff1a;2.插入节点的多种情况&#xff1a;1.叔叔存在且为红&#xff1a;2.叔叔不存在/存在且为黑(单旋变色)3.叔叔不存在/存在且为黑(多旋&…

【计算机网络篇】计算机网络的定义和分类

文章目录 &#x1f354;什么是计算机网络&#x1f5c3;️计算机网络的分类⭐按交换方式分类⭐按使用者分类⭐按传输介质分类⭐按覆盖范围分类⭐按拓扑结构分类 &#x1f6f8;小结 &#x1f354;什么是计算机网络 计算机网络是指将多台计算机或其他网络设备通过通信链路连接起来…

C语言 ——常量

3, 常量 3.1 什么是常量 ​ 程序运行的过程中&#xff0c;其值永远不会发生改变的数据 3.2 常量的分类 3.3 练习 ​ 给你一组数据&#xff0c;说出下面每组数据中&#xff0c;分别是哪种类型的常量 3.4 细节补充 实型常量的小细节&#xff1a; * 小数点前后&#xff0c;如果…

【数据结构】二叉树---AVL树的实现

目录 一. 什么是AVL树 二. AVL树的结点结构定义 三. AVL树的动态平衡法 1. 左单旋转 --- RL(RotateLeft) 型调整操作 2. 右单旋转 --- RR(RotateRight) 型调整操作 3. 先左后右双旋转 --- RLR (RotateLeftRight) 型调整操作 4. 先右后左双旋转 --- RRL (RotateRightL…

python工具方法 47 基于paddleseg将目标检测数据升级为语义分割数据

在进行项目研究时,通常需要搜集开源数据集。但是所能搜集到的数据集通常会存在形式上的差异,比如我想要的是语义分割数据,而搜集到的数据集却是目标检测数据;在这种情况下所搜集的数据就完成没有利用价值了么?不,其还存在价值,我们可以通过模型训练对数据标签的标注粒度…

【学习】python装饰器

这篇文章讲的太清楚了&#xff01;非常好好好&#xff01;&#xff01;&#xff01;Python】一文弄懂python装饰器&#xff08;附源码例子&#xff09; 在他的基础上加了一些自己的话&#xff0c;便于自己理解。 注意的点&#xff1a; func 表示函数对象&#xff0c;可以将其…

智慧公厕建设,助力打造宜居、韧性、可持续的智慧城市

公共厕所作为智慧城市的重要组成部分&#xff0c;对于城市的高质量发展起着至关重要的作用。智慧公厕建设旨在通过全面监测、控制和管理公共厕所&#xff0c;实现多方面功能&#xff0c;包括公共厕所环境监测与调控、厕位占用监测与引导、消耗品监测与缺失提示、安全防范与管理…

使用OCC进行旋转扫掠

旋转扫掠是将物体以某一个坐标轴为参照&#xff0c;按照指定的角度旋转生成新的图形的过程 这里使用面的案例&#xff0c;使用线的逻辑处理其实是一样的 //构造旋转轴 gp_Ax1 anAxis; //设置轴的原点 anAxis.SetLocation(0,0,0); //设置轴的方向 anAxis.SetDirection(gp_Dir(0…