记一次maven jar包冲突的排查和解决过程,干货分享

简介: 记一次maven jar包冲突的排查和解决过程,干货分享

一、背景

项目新拉了一个分支开发,前几天好好的,加了一些功能后发现部署一直失败。


总是报同一个错误(详见2.1),而且并不像是自己代码的错误。


和同事花费了一些时间进行排查,最终定位并解决问题,记下分析思路。



二、排查步骤

注:截图均来自自己的本地练习项目,而不是排查一模一样的截图,只是演示效果。


2.1报错内容

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]

       at java.util.concurrent.FutureTask.report(FutureTask.java:122)

       at java.util.concurrent.FutureTask.get(FutureTask.java:192)

       at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941)

       at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872)

       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

       at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1421)

       at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1411)

       at java.util.concurrent.FutureTask.run(FutureTask.java:266)

       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

       at java.lang.Thread.run(Thread.java:748)

Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]

       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)

       ... 6 common frames omitted

Caused by: org.apache.catalina.LifecycleException: Failed to start component [Pipeline[StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]]

       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)

       at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166)

       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

       ... 6 common frames omitted

Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.authenticator.NonLoginAuthenticator[]]

       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)

       at org.apache.catalina.core.StandardPipeline.startInternal(StandardPipeline.java:182)

       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

       ... 8 common frames omitted

Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;

       at org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1186)

       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

       ... 10 common frames omitted

2019-05-28 11:30:28.605  WARN 25 --- [main]  ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat

2019-05-28 11:30:28.640 ERROR 25 --- [main]  o.s.boot.SpringApplication               : Application startup failed

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat

       at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:137)

       at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)

       at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)

       at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)

       at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)

       at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)

2.2 尝试

第一反应是给出的错误信息非常不明确,就是说tomcat启动失败。


(1) 由于这个项目是一个maven项目,直接用maven编译命令查看是否可以编译成功,发现都SUCCESS.


(2) 尝试把代码发布到不同的环境,查看是否是环境造成的,发布到了其他环境上,偶尔能成功,发布master都成功,排除了环境bug。


(3) 在google上搜报错信息,大多数提示是servlet-api的jar包冲突。


然后使用mvn dependency:tree 查看依赖树,发现新引入的几个jar包其中有一部分确实包含了servlet-api。


然修改pom.xml文件,排除servelt-api相关依赖。


发现依旧报错。



(4) 由于新增了多个jar包不确定是哪个jar包引起的,因此基于这个分支新拉出一个分支用于删除依赖排错。


删除最可以的新的jar包以及相关的本地代码,重新部署,发布成功。


然后定位到此jar包的servlet-api是通过jboss的包引入的。


由于这是第二方的dubbo的调用api jar包,因此可以放心去掉jboss。


直接排除了jboss的依赖。

————————————————

版权声明:本文为CSDN博主「明明如月学长」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/w605283073/article/details/90648055

相关文章
|
3月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
3月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
8天前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
20 3
|
3月前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
3月前
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
|
3月前
|
Java Maven Windows
Maven 引用jar包冲突 Intellij 查找排除JAR包的依赖关系(Maven Helper)
Maven 引用jar包冲突 Intellij 查找排除JAR包的依赖关系(Maven Helper)
53 0
|
3月前
|
Java Maven
SpringBoot 引用仓库中没有 第三方包 - 将jar 包安装本地 maven
SpringBoot 引用仓库中没有 第三方包 - 将jar 包安装本地 maven
37 0
|
11天前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
63 8
|
1月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
119 1
Maven——创建 Spring Boot项目
|
1月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
26 1
如何使用 maven 创建一个 Spring Boot项目

推荐镜像

更多