栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

记一次jar包冲突

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

记一次jar包冲突

准备在工作流程的项目中加入数据校验,然后导入jar包


    org.hibernate
    hibernate-validator
    4.3.1.Final 

加入一个实体
加一个控制层
但在实体的一个属性上写注解@NotBlank的时候,发现飘红,怎么回事?先不管再加一个正则试试,又飘红,咋回事?网上找一下原因,说是版本不兼容,说spring boot版本过高,但我不能改spring boot的版本,所以继续看其他原因,再看我spring boot版本2.3.1,于是突然又看到一个博客,说从2.3x后spring boot已经兼容了validator,于是把之前哪个左边删除了,重新把新的包导入

        
            org.springframework.boot
            spring-boot-starter-validation
        

nice~每个校验注解都能用了,也不飘红了,就很虚浮,把控制层随便先写一个接口试试

@RestController
public class CheckTestController {
    @PostMapping("/check")
    public CheckTest check(@RequestBody @Valid CheckTest checkTest) {
        return checkTest;
    }

}

可以没报错,距离成功只有一步 ctrl+shift+f10 ,启动吧!初始化数据。。。加载工作流数据,只见代码一页一页的滚动。。。说时迟那时快,突然!一个红色的单词映入眼帘–ERROR,WDNMD!

什么原因?
报错如下:

ERROR 9944 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

An attempt was made to call a method that does not exist. The attempt was made from the following location:

    javax.el.ELManager.getexpressionFactory(ELManager.java:38)

The following method did not exist:

    javax.el.ELUtil.getexpressionFactory()Ljavax/el/expressionFactory;

The method's class, javax.el.ELUtil, is available from the following locations:

    jar:file:/C:/Users/CC/.m2/repository/javax/el/el-api/2.2/el-api-2.2.jar!/javax/el/ELUtil.class
    jar:file:/C:/Users/CC/.m2/repository/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/javax/el/ELUtil.class

The class hierarchy was loaded from the following locations:

    javax.el.ELUtil: file:/C:/Users/CC/.m2/repository/javax/el/el-api/2.2/el-api-2.2.jar


Action:

Correct the classpath of your application so that it contains a single, compatible version of javax.el.ELUtil

?????这是啥?这是jar包冲突啊,el-api.jar就是个表达式的jar包依赖罢了,然鹅,一想我maven中没有引入啊

jar包冲突情况,A里已经有B了,你又引入了一次B,导致冲突,或者你单独引入了两个A

解决思路,找到两个冲突的包,把版本低的删除,因为高版本一般向下兼容,如果高版本的不行再换成低版本的

我这儿最后一步步排查,发现工作流已经中自己引入了一个包el-api-2.2.jar


            org.springframework.boot
            spring-boot-starter-validation
   

中也引入了el的包,所以经过取舍,我把这个spring-boot-starter-validation依赖删除了,重新导入一个单独的校验依赖(需要注意的是该依赖的版本和spring boot 2.3x是兼容的) ↓


            org.hibernate
            hibernate-validator
            5.4.0.Final
        

这个依赖只是单纯的校验依赖,所以el.jar不会有冲突

总结:开始是validator版本过低与spring boot2.3.x不兼容,之后导入spring boot validator的模板,因为该模板和工作流都分别依赖了不同版本的el.jar,导致jar包冲突,最后我把spring boot validator的模板删除解决了el.jar冲突,引入了高版本的validator和spring boot 2.3x兼容,项目成功运行~ ~ ~ ~ ~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/591511.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号