依赖外部jar包问题记录

【SpringBoot集成I18n国际化文件在jar包外生效】 SpringBoot集成I18n国际化文件在jar包外生效问题描述不生效的原因解决办法 问题描述 公司最近出了个需求,是i18n国际化文件需要在springboot生成的jar包外生效.集成i18n国际化网上的文章很多就不在赘述了.但是一直无法在jar包外生效.因为每次都要替换jar包里面的文件比较麻烦.从部署程序的需求上来说,倒是比较合理.所以记录一下解决过程. 不生效的原因 我们通过配置文件中的key"spring.messages.basename",找到对应的使用类ResourceBundleCon 阅读详情

一、jar包信息

其他地区的同事开发的模块,依赖该jar包用于cli-name转换,暂且叫它A.jar。

该模块基于dropwizard框架,内部依赖比较复杂。

依赖A.jar后,调试过程中产生了不少问题,做个记录,有些解决方案比较蠢。

 

二、springboot依赖该jar包,问题记录

1. IDEA中运行junit单元测试,报错:command line is too long

        一般情况下可采用的解决方案 : https://blog.youkuaiyun.com/kzadmxz/article/details/80322687    

        但是依赖的这个jar包中,cli-name转换流程,有获取classpath,扫描jar包中的xml文件这个逻辑

String javaClassPath = System.getProperty("java.class.path");

        dynamic classpath造成获取到的classpath不正确,扫描不到xml文件,产生的问题类似这个:https://blog.youkuaiyun.com/moneyshi/article/details/82459039

        最终解决“command line is too long”的方法还是要使本地存储库的路径尽可能短,参考  http://www.it1352.com/535521.html

 

2. Application Run failed

image.png

        A.jar基于dropwizard框架,应用启动失败可能是dropwizard的一些注解的影响或者引入了冲突的jar包,具体原因没有深究。

        对A.jar做了依赖分析,排除掉其中的xxx-xx-rest,应用可正常启动

<dependency>
    <groupId>com.xxx.xxx.xxx.platform</groupId>
    <artifactId>xx-xx-xxconverthelper</artifactId>
    <version>xxxxx</version>
    <exclusions>
        <exclusion>
            <groupId>com.xxx.xxx.xx.platform</groupId>
            <artifactId>xxx-xx-rest</artifactId>
        </exclusion>
    </exclusions>
</dependency>

 

3. 框架不兼容

        前面提到依赖的这个jar,它是基于dropwizard框架下的一个module,默认的IOC容器为hk2,其中有个类中存在这样的代码:

serviceLocator = ServiceLocatorHolder.getLocator();
inventoryLtpService = (InventoryLtpService)serviceLocator.getService(InventoryLtpService.class, new Annotation[0]);

      我们是springboot框架,用的是springboot的IOC,hk2的serviceLocator必然是获取不到的,上面的代码会报空指针异常。

        没有想到什么更好的方案,采用的解决方法是覆盖jar包中的这个类,重新实现代码逻辑。可参考:https://blog.youkuaiyun.com/u013062329/article/details/86592385

 

三、osgi依赖该jar包,问题记录

1. jar包冲突

        运行UT,报错,查找到log4j-over-slf4j是由umben-em-rest间接引入的,直接全部排除掉umben-em-rest,同2.2

image.png

 

2. osgi依赖第三方非bundle的jar包

        umebn-em-rosngconverthelper是一个普通的jar包,非bundle。参考https://blog.youkuaiyun.com/sunquan291/article/details/89189318

        采用的解决方案是第三方依赖作成JAR,嵌入到当前bundle中。存在的问题是A.jar提供的cli-name转换功能,里面依赖了比较多其他jar包,需要一起嵌入进来,依赖传递问题比较严重,调试起来复杂,还有import-package的处理需要比较仔细。

        对于依赖传递问题,一开始是做了依赖分析,想尽量把依赖都嵌入进来,避免调试时一遍遍出现ClassDefNotFound。但是一些错误引入会造成一些麻烦,比如我把jdom错误地作为依赖写在了pom里,造成

 bundle安装时报错,直到看到 https://stackoverflow.com/questions/33395100/the-default-package-is-not-permitted-by-the-import-package-syntax   最后一个回答,才意识到错误所在。尽量还是只嵌入代码逻辑需要用到的jar包,一来避免类似这样的低级错误,二来尽量减小bundle的体积。

 

3. classpath问题

        上面提到cli-name转换流程,有获取classpath,扫描jar包中的xml文件这个逻辑。当运行karaf时,debug到 System.getProperty("java.class.path") 这一步,无法获取到JDK目录下的lib jar包,因此无法找到xml文件。https://stackoverflow.com/questions/3906222/printing-osgi-bundle-classpath 这个Answer描述的是类似的问题。

        目前对OSGI的底层原理和类加载器了解比较少,针对这个问题,采用的方法还是覆盖jar包中的类,将xml文件放在指定位置,不扫描jar,去指定位置读取。

 

4. bundle的文件读取问题

        将xml文件放在src/resources文件夹下,采用的文件加载方式为:

URL url = this.getClass().getClassLoader().getResource(directory);

        运行karaf之后,获取到的url为 bundleresource://214.fwk1205445235/converclass/,并不是常规的file://  开头的协议,因此还是会报找不到文件错误。网络上的一种解决方法为https://blog.youkuaiyun.com/windrui/article/details/40581219 

 

5. xml文件解析异常

javax.xml.parsers.FactoryConfigurationError: Provider com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl could not be instantiated: java.lang.ClassCastException: com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory

相似问题记录:

https://stackoverflow.com/questions/2619880/unbelievable-cannot-cast-from-class-x-to-its-super-class

http://www.voidcn.com/article/p-annolfiy-btt.html

 

Eclipse生成jar包后,Spring无法扫描到bean定义 无论包是在src中还是在jar中,其实根本的思路还是根据给的包域名(如:com.wang.vo.request.hotel.test)定位到包的资源对象。包在src中,我们可以把它当做文件File来进行处理,因此在src中包是以文件夹的形式来体现的,但在jar中,包的含义是有些不同的,我们不能把它当做File来对待(这样你或得到的是jar的File对象)。那么怎么才能获取jar里包的资源对象呢? 阅读详情

相关推荐

Android学习之:第一次写SDK及SDK打Jar包相关问题记录

项目原因,需要写一个SDK并且要打成Jar包形式。第一次写SDK及打Jar,过程中还是碰到了不少问题,所以简单的记录下,以防万一。 一、编写SDK的思路: 1、对外提供公共方法,让外部传递参数; 2.定义接口让外部实现;

xiangdengbin的博客 2509

关于IDEA找不到classpath中package内的xml文件问题和解决办法

之前,一直被一个严重的问题所困扰,那就是我的classpath中包的配置文件为什么不能够被IDEA找到,而eclipse就能够找到,在经历了很久的痛苦挣扎之后,终于找到了原因和解决办法。 很简单,这里由于暂时没有找到更为有效的解决办法,多以这里我只能够暂时的称这个问题是一个bug。 在target的生成目录中没有你的xml配置文件这是问题所在。这就是为什么在自己的项目文件命名有这个文件,而项目

MyCodeDream的专栏 7579

maven打包遇到的问题,找不到符号,找不到类

maven ...

qq_43774349的博客 1137

springboot打包jar无法扫描到.xml文件的问题

问题是这样的:在eclipce运行时没有问题的,srpingboot打包成jar包会访问数据会出现错误 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):  这个时候我们必须在pom.xml文件下加入这个资源文件,加入的方式很多, http://bglmmz.it

qq_28929589的博客 6916

详解APM的开方控制器sqrt_controller

前言 前面说过,sqrt_controller是对P项进行整定用途的,目的就是让P项的控制响应“软”下来,实际上就是一个经过改进的P控制器。读懂了sqrt_controller,那么你对APM的P控制器就了解得差不多了。 仅讨论P控制器,sqrt_controller的作用就是设定一个量linear_dist,以这个量的正负值为分界线划分出一个线性区域范围,在这个范围内表示误差量还很小,遵循Kp*error计算方式输出控制量。 超过linear_dist后,表明误差较大,此时不能由着误差单纯按照线性方式乘以

moumde的博客 4896

基于Python的高考志愿辅助填报系统

在实际应用中,系统需要处理更复杂的数据,包括更多的高校和专业信息、更详细的录取规则、以及用户的历史选择等。系统需要提供用户友好的界面,让考生输入自己的信息和偏好,然后通过后端的模型计算出推荐的志愿列表。此外,系统还应该提供一些个性化的服务,如根据考生的输入动态调整推荐策略、保存用户的填报历史和偏好等。特征可能包括考生的分数、所在省份、文理科类别、专业偏好、高校的地理位置、排名、专业的就业前景等。3. **推荐逻辑**:根据用户的分数和专业偏好,结合历史录取数据,使用简单的算法来推荐可能录取的高校和专业。

coder_wwwdy的博客 1978

Invalid bound statement (not found),springboot扫描不到jar包中mapper文件的问题处理

今天在使用自己封装的jar中的方法时,出现了Invalid bound statement (not found),那今天我就来分析以下出现此问题的原因。

xxxxg_xg的博客 3470

在ParaView中编程实现涡量可视化

综上所述,本文介绍了在ParaView中使用编程方式实现涡量可视化的方法,并提供了相应的Python代码示例。通过灵活运用ParaView的编程接口,我们可以根据特定需求定制复杂的数据可视化流程,进一步深入了解和分析流体的旋转行为。ParaView是一款强大的开源数据可视化工具,它提供了丰富的功能和灵活的编程接口,使用户能够定制数据可视化流程。你可以根据需要自定义颜色映射范围和颜色,上述代码中的RGBPoints列表中包含了两个点,分别对应涡量值为0和10时的颜色。在实际使用过程中,你需要替换代码中的。

ByteProwl的博客 1436

springboot 引入外包的jar包

springboot 引入外包的jar包 maven项目开发过程中可能遇到jar包找不到maven依赖,这时没方法通过pom.xml直接引入。 下面的文章记录springboot引入外包的jar包的过程 http://yayihouse.com/yayishuwu/chapter/2231 ...

xm的博客 630

YOLO11改进 | 注意力机制 | 添加SimAM注意力机制【全网独家+附完整代码】

yolo11,yolo11改进,yolo11创新,yolo11添加注意力机制

kay_545 1230

【LE Audio】CAP精讲[1]: 从理论到实操,CAP 协同流程入门全攻略

LEAudio生态中的CommonAudioProfile(CAP)是一个关键协同框架,它通过整合基础音频协议(BAP/VCP/MICP等)构建多设备协同能力。CAP定义了三大核心功能:音频流管理、设备组控制和统一交互服务,解决了传统蓝牙音频在多设备场景下的协同痛点。其规范历经v1.0到v1.0.1的优化,修正了角色定义、连接流程等关键模块,提升设备兼容性。CAP采用严格的语言约定(shall/must/should)和术语体系(ContextType/CCID/协同集),确保不同厂商设备能相互理解。

byte轻骑兵的技术小窝 2万+

面向博客编程之IEDA外部jar包打包时提示找不到

记录面向博客编程之IEDA外部jar包打包时提示找不到 原文链接 (13条消息) maven打包时外部依赖错误问题的解决_qi_ming_hao_nan的博客-优快云博客

Mr_Ares_Pro的博客 228

视觉Transformer实战 | 将卷积引入视觉Transformer(CvT)

CvT 是一种融合卷积神经网络与 Vision Transformer 优势的视觉模型,旨在解决 ViT 缺乏平移不变性和局部性等归纳偏置的问题。CvT 采用分层结构逐级降采样,使用卷积词元嵌入代替传统 patch 切分,引入卷积投影替代线性投影。这些设计使得 CvT 能够去除位置编码,在高分辨率输入下表现更优。本节深入解析 CvT 的核心原理,并提供完整的 PyTorch 代码实现,演示如何在实际数据集上训练和评估 CvT 模型。

盼小辉丶的博客 726

记录一次,java 引入外部jar包后,IDE运行正常,打包成jar包后,启动提示找不到引入jar包中的类

Spring Boot 的打包机制(例如 spring-boot-maven-plugin)会将所有 compile 和 runtime 范围的依赖打包到最终的可执行 JAR 中。system 范围的依赖不会被打包到最终的 JAR 文件中。这意味着在本地运行时,IDEA 能找到该依赖,但在打包后运行时,Spring Boot 无法加载该依赖。在打包后运行时,systemPath 指定的 JAR 文件可能无法被正确加载,因为它不会被包含在最终的 JAR 文件中。但 system 范围的依赖不会被包含在内。

darling331的博客 768

XGBoost原生接口和Sklearn接口参数详解

XGBoost原生接口和Sklearn接口参数详解

算法工程师 2654

LabVIEW进行MQTT通信及数据解析

该文章介绍了LabVIEW的MQTT通信的开源VI控制,以及如果进行数据的解析,特别是一些需要注意的点

heda3的博客 4106

关于maven项目加载maven库以外的jar包找不到报错

最近做项目下载了源码 由于用到了maven库外的jar包(例如Orcal的jar Maven库中没有) 一直报错找不到jar 由于我已经有了这种jar包 所以先在本地库中添加上Orcal的jar 加入后项目还是一直报错  说找不到jar  手动查看本地的maven库 发现已经有了这种jar   最后看elicpse的problem 报错说》.m2目录里缺少这个jar 然后手动copy maven

qq_31483135的博客 475

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

springcloud项目war包部署总结

springcloud项目默认使用内嵌tomcat的jar直接运行,但最近想在外部tomcat埋探针进行APM监控,要求全部改成war包部署,过程中遇到了很多问题,现在把自己遇到的问题记录下。 一般修改步骤: 一、修改pom.xml文件将默认的jar方式改为war: <groupId>com.example</groupId> <artifactId...

当梦想照进现实。。。 4184

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【无标题】springboot项目在pom文件添加了依赖,却没有显示在外部库中

今天想对一个springboot+vue项目集成websocket,于是按照教程在pom文件中引入依赖,结果引入依赖之后重新构建,在外部库中却没有出现对应的jar包 由于问题没有截图,这是解决完后的样子,可以看见这个包已经出现在外部库中。 构建之后报错,[ERROR] org.apache.maven.artifact.InvalidArtifactRTException:For artifact {null :null:null:jar}: The groupId cannot be empty 这是因为

weixin_50544837的博客 4309

eclipse中无法移除jar包_Spring Boot 里面引入hive-jdbc包,依赖冲突,tomcat启动不了。...

SpringBoot 版本不管多少, 只要引入了hive-jdbc, 他指定会让你jar包冲突, 因为不是内嵌tomcat问题,就是和tomcat jar包冲突遇到了大坑,所以在这里记录下,让各位不要遇到这种问题了下面的这个链接地址:文章写中有纰漏Lucas这篇自己写的文章,当时只解决了使用SpringBoot内嵌tomcat的错误Andot蚁点:Spring boot 整合Hive-jdbc导致...

weixin_28820911的博客 327

内网构建Maven项目踩的坑

之前搞得maven项目,终于稳定了,可以放到内网,让小伙伴们参与开发了。 准备工作:复制了完整的本地仓库;项目代码;jdk8,eclipse4.7. 由于原来项目用的jdk6,eclipse3.7,以前踩过版本的坑,这次我把整个环境都用了在本机开发时的版本,避免出现莫名其妙的问题。由于之前装了maven,仓库里有很多资源版本上基本没有我这个项目的高,我就简单把本地仓库与内网仓库复制合并了一下,...

菜鸡的专栏 5022

maven 踩坑小记

2022年第一篇文章,没什么好说的,给大家拜个早年吧!

weixin_45740473的博客 1万+

生成解析sqlite DB文件笔记

这两天学习处理用sqlite存储的db文件总结一点学习心得 1.打jar包的时候在注意在最后一步选择入口函数所在的类,不然运行jar的时候找不到入口   如果不在这里设置的话也可以在jar包的META-INFO/MANIFEST.MF里添加入口函数所在的类   添加格式:   Main-Class: encodedb.edb   添加注意:   1)Main-Class:后面要有空格

autumn_xl的专栏 2030

小程序本地图片偶尔加载不出来_得亏了它,我才把潜藏那么深的Bug挖出来

2020 年写了很多事故解决的文章,并不是我绞尽脑汁想出来的,而是真的遇到了这些问题。通过文章的方式记录下来,分享出去,才有意义。事故背景首先看下面的图吧,这是我从 cat 上截的图。可以看到是一个 Rpc 调用的错误,从错误中我们只能分析出这个 Rpc 的请求成功了,并且返回了,因为都走到了反序列化这步。最后是在创建 DTO 对象的时候报错了,Could not initalize c...

weixin_39823269的博客 211

springboot引用jsp

解决springboot引入jsp的各种问题

zwjzone的博客 584

【Java】面向对象基础 之 模块

我们知道,.class 文件是 JVM 看到的最小可执行文件,而一个大型程序需要编写很多Class,并生成一堆.class文件,很不便于管理,所以,jar文件就是 class 文件的容器。在Java 9之前,一个大型Java程序会生成自己的jar文件,同时引用依赖的第三方jar文件,而JVM自带的Java标准库,实际上也是以jar文件形式存放的,这个文件叫rt.jar,一共有60多M。注意:JVM自带的标准库rt.jar不要写到classpath中,写了反而会干扰JVM的正常运行。

ihero的博客 517
上一篇: jenkins job builder定义job变量缺省值的覆盖顺序
下一篇: jsoup解析XML(String to Document, Document to String)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值