记一次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

相关文章
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
12月前
|
存储 Java Maven
Maven系统级别依赖:解决部署时Jar包缺失问题
以上就是关于Maven系统级别依赖解决部署时Jar包缺失问题的解答,希望对你有所帮助。在软件开发中,遇到问题并解决问题是常态,希望你能够善用这些工具,解决你遇到的问题。
733 28
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
2513 3
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
SQL 前端开发 Java
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
这篇文章介绍了如何在IntelliJ IDEA中使用Maven将Spring Boot项目打包成可运行的jar包,并提供了运行jar包的方法。同时,还讨论了如何解决jar包冲突问题,并提供了在IDEA中同时启动Vue前端项目和Spring Boot后端项目的步骤。
在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
|
Java Maven Windows
Maven 引用jar包冲突 Intellij 查找排除JAR包的依赖关系(Maven Helper)
Maven 引用jar包冲突 Intellij 查找排除JAR包的依赖关系(Maven Helper)
232 0
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
2503 2
[JarEditor]可直接修改jar包的IDEA插件
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
关系型数据库 Java 分布式数据库
PolarDB产品使用问题之部署到服务器上的Java应用(以jar包形式运行)无法连接,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。