今天碰到了一个奇葩问题,项目引用了一个同事给的jar包,本地环境引入正常运行没问题,线上启动报错,网上查说是很可能是类冲突了,一直以为是自己引入本地jar然后打war之后引入的问题,后来把同事给的jar安装到本地maven仓库,正常打包,查看项目里面WEB-INF/lib也有,结果还是有问题。

 Caused by: java.lang.VerifyError: Cannot inherit from final class
                at java.lang.ClassLoader.defineClass1(Native Method)
                at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
                at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
                at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2395)
                at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:855)
                at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1327)
                at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1180)
                at com.fasterxml.jackson.datatype.jdk8.Jdk8Module.setupModule(Jdk8Module.java:30)
                at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:583)
                at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.registerWellKnownModulesIfAvailable(Jackson2ObjectMapperBuilder.java:751)
                at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.configure(Jackson2ObjectMapperBuilder.java:639)
                at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.build(Jackson2ObjectMapperBuilder.java:623)
                at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.<init>(MappingJackson2HttpMessageConverter.java:59)
                at org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter.<init>(AllEncompassingFormHttpMessageConverter.java:76)
                at org.springframework.web.filter.FormContentFilter.<init>(FormContentFilter.java:60)
                at org.springframework.boot.web.servlet.filter.OrderedFormContentFilter.<init>(OrderedFormContentFilter.java:29)
                at org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration.formContentFilter(WebMvcAutoConfiguration.java:166)
                at org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$$EnhancerBySpringCGLIB$$8c0b62b7.CGLIB$formContentFilter$1(<generated>)
                at org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$$EnhancerBySpringCGLIB$$8c0b62b7$$FastClassBySpringCGLIB$$102e3f95.invoke(<generated>)
                at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
                at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
                at org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$$EnhancerBySpringCGLIB$$8c0b62b7.formContentFilter(<generated>)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
                ... 36 more

折腾一下午无果之后,和同事沟通才知道这个他对接第三方之后二次封装的jar包,他对接也引用了很多第三方jar包,查看他的jar包发现很多第三方公共包名和文件,二次生成jar包把引用的公共jar包的编译文件也直接放进jar包里面,我觉得很可能是这个问题导致类冲突。

目前的解决办法就是直接把对接的代码写在当前项目里面,直接引入对方的包,避免文件冲突。

这个经历太奇葩了,我也想不通同事为什么自己重新封装jar包给我,坑了快一天时间,这个问题记录一下。至于为什么本地引用正常运行这个后面有时间在研究。

在这里插入图片描述

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐