遇到jar冲突时 肯定想快速定位这个jar在哪里被引入
例如下案例 servlet-api包冲突
The following method did not exist:
javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
The calling method's class, org.apache.catalina.authenticator.AuthenticatorBase, was loaded from the following location:
jar:file:/usr/local/develop/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.56/tomcat-embed-core-9.0.56.jar!/org/apache/catalina/authenticator/AuthenticatorBase.class
The called method's class, javax.servlet.ServletContext, is available from the following locations:
jar:file:/usr/local/develop/repository/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar!/javax/servlet/ServletContext.class
jar:file:/usr/local/develop/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.56/tomcat-embed-core-9.0.56.jar!/javax/servlet/ServletContext.class
jar:file:/usr/local/develop/repository/javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1.jar!/javax/servlet/ServletContext.class
The called method's class hierarchy was loaded from the following locations:
javax.servlet.ServletContext: file:/usr/local/develop/repository/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar
错误提示 调用的方法被servlet-api-2.5.jar 加载调用 所以我们只需要找到这个包在哪里被引入 然后排除他 问题就得到解决了
maven的查看依赖树命令 需要配置环境变量这里不多赘述
mvn dependency:tree
命令效果如下
[INFO] | +- org.springframework.boot:spring-boot-autoconfigure:jar:2.6.3:compile
[INFO] | | \- org.springframework.boot:spring-boot:jar:2.6.3:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-actuator:jar:2.6.3:compile
[INFO] | | +- org.springframework.boot:spring-boot-actuator-autoconfigure:jar:2.6.3:compile
[INFO] | | | \- org.springframework.boot:spring-boot-actuator:jar:2.6.3:compile
[INFO] | | \- io.micrometer:micrometer-core:jar:1.8.2:compile
[INFO] | | +- org.hdrhistogram:HdrHistogram:jar:2.1.12:compile
[INFO] | | \- org.latencyutils:LatencyUtils:jar:2.0.3:runtime
[INFO] | \- org.projectlombok:lombok:jar:1.18.20:compile
[INFO] +- org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:jar:3.1.1:compile
[INFO] | +- org.springframework.cloud:spring-cloud-starter:jar:3.1.1:compile
[INFO] | | +- org.springframework.cloud:spring-cloud-context:jar:3.1.1:compile
[INFO] | | | \- org.springframework.security:spring-security-crypto:jar:5.6.1:compile
[INFO] | | +- org.springframework.cloud:spring-cloud-commons:jar:3.1.1:compile
[INFO] | | \- org.springframework.security:spring-security-rsa:jar:1.0.10.RELEASE:compile
[INFO] | | \- org.bouncycastle:bcpkix-jdk15on:jar:1.68:compile
[INFO] | | \- org.bouncycastle:bcprov-jdk15on:jar:1.68:compile
[INFO] | +- org.springframework.cloud:spring-cloud-netflix-eureka-client:jar:3.1.1:compile
[INFO] | +- com.netflix.eureka:eureka-client:jar:1.10.17:compile
[INFO] | | +- com.netflix.netflix-commons:netflix-eventbus:jar:0.3.0:compile
[INFO] | | | +- org.slf4j:slf4j-api:jar:1.7.36:compile
[INFO] | | | +- com.netflix.netflix-commons:netflix-infix:jar:0.3.0:runtime
[INFO] | | | | +- commons-jxpath:commons-jxpath:jar:1.3:runtime
[INFO] | | | | +- joda-time:joda-time:jar:2.3:runtime
[INFO] | | | | +- javax.servlet:servlet-api:jar:2.5:runtime
[INFO] | | | | +- org.antlr:antlr-runtime:jar:3.4:runtime
[INFO] | | | | | +- org.antlr:stringtemplate:jar:3.2.1:runtime
[INFO] | | | | | \- antlr:antlr:jar:2.7.7:runtime
[INFO] | | | | \- com.google.code.gson:gson:jar:2.8.9:runtime
[INFO] | | | \- org.apache.commons:commons-math:jar:2.2:runtime
[INFO] | | +- com.thoughtworks.xstream:xstream:jar:1.4.18:compile
[INFO] | | | \- io.github.x-stream:mxparser:jar:1.2.2:compile
[INFO] | | | \- xmlpull:xmlpull:jar:1.1.3.1:compile
[INFO] | | +- com.netflix.archaius:archaius-core:jar:0.7.6:compile
[INFO] | | | \- com.google.guava:guava:jar:31.0.1-jre:compile
[INFO] | | | +- com.google.guava:failureaccess:jar:1.0.1:compile
[INFO] | | | +- com.google.guava:listenablefuture:jar:9999.0-empty-to-avoid-conflict-with-guava:compile
[INFO] | | | +- org.checkerframework:checker-qual:jar:3.12.0:compile
[INFO] | | | +- com.google.errorprone:error_prone_annotations:jar:2.7.1:compile
[INFO] | | | \- com.google.j2objc:j2objc-annotations:jar:1.3:compile
[INFO] | | +- javax.ws.rs:jsr311-api:jar:1.1.1:compile
[INFO] | | +- com.netflix.servo:servo-core:jar:0.12.21:compile
[INFO] | | +- org.apache.httpcomponents:httpclient:jar:4.5.13:compile
[INFO] | | | +- org.apache.httpcomponents:httpcore:jar:4.4.15:compile
[INFO] | | | \- commons-codec:commons-codec:jar:1.15:compile
[INFO] | | +- com.google.code.findbugs:jsr305:jar:3.0.2:compile
[INFO] | | +- commons-configuration:commons-configuration:jar:1.10:compile
[INFO] | | | +- commons-lang:commons-lang:jar:2.6:compile
[INFO] | | | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] | | +- com.google.inject:guice:jar:4.1.0:compile
[INFO] | | | \- javax.inject:javax.inject:jar:1:compile
[INFO] | | +- com.github.vlsi.compactmap:compactmap:jar:2.0:compile
[INFO] | | | \- com.github.andrewoma.dexx:dexx-collections:jar:0.2:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.13.1:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-core:jar:2.13.1:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-databind:jar:2.13.1:compile
[INFO] | | \- org.codehaus.jettison:jettison:jar:1.4.0:runtime
jar依赖已经显示出来了 ,直接搜索 servlet-api 然后在检查版本2.5刚好就是我们想找的
线上追溯 发现 org.springframework.cloud:spring-cloud-netflix-eureka-client 引入servlet-api
然后我们排除掉 即可解决问题
版权声明:本文为a15835774652原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。