报错冲突问题
这几天遇到个不太好看的问题,在本地linux上是能正常运行的,在uos的linux上报错问题
报错如下: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getServletRegistrationBean9' defined in class path resource [cn/myapps/conf/MyappsMvcConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.web.servlet.ServletRegistrationBean]: Factory method 'getServletRegistrationBean9' threw exception; nested exception is java.lang.NoSuchMethodError: org.apache.commons.logging.LogFactory.getClassLoader(Ljava/lang/Class;)Ljava/lang/ClassLoader;
找了很久,发现包冲突的问题
仔细看:
nested exception is java.lang.NoSuchMethodError: org.apache.commons.logging.LogFactory.getClassLoader这句话是方法LogFactory类里面没找到getClassLoader方法
在linux报错如图:
在idea上发现很多org.apache.commons.logging.LogFactory包
去obpm-runtime.war包的lib去看,减少选择范围
发现在这个spring-jcl-5.0.9.RELEASE.jar包没有对应的getClassLoader方法
在commons-logging-1.2.jar包里有getClassLoader方法
弄断点发现的确有走commons-logging-1.2.jar的方法
没有走spring-jcl-5.0.9.RELEASE.jar的任何方法
试过在uos的tomcat把这个包去除,可正常运行
现在要在maven里把spring-jcl-5.0.9.RELEASE.jar去除
到指定obpm-core包,用命令mvn dependency:tree查看包所在路径
[INFO] +- org.springframework:spring-test:jar:5.0.9.RELEASE:test
[INFO] | \- org.springframework:spring-core:jar:5.0.9.RELEASE:compile
[INFO] | \- org.springframework:spring-jcl:jar:5.0.9.RELEASE:compile
去到对应的位置里
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<exclusions>
<exclusion>
<!--与 commons-logging-1.2.jar有冲突 导致uos跑不起来-->
<groupId>org.springframework</groupId>
<artifactId>spring-jcl</artifactId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
runtime可正常启动
signon可正常启动
从图中有报错,但不影响运行
kms可正常启动
不明白的原因:
为什么uos会跑到spring-jcl-5.0.9.RELEASE.jar方法里,有些linux是正常的
参考连接:
https://blog.csdn.net/weixin_40686853/article/details/87923574