背景
项目正常运行几年,近期优化调整修复漏洞,依赖升级后clean+install 重启发现项目启动失败,访问所有接口都报错404
错误信息
output输出异常信息截图
tomcat 打印异常信息截图
output打印异常信息详情
D:\javaRuanJian\Tomcat\apache-tomcat-8.5.76\bin\catalina.bat run
[2023-12-28 04:33:53,489] Artifact mams-rest:war exploded: Waiting for server connection to start artifact deployment...
Using CATALINA_BASE: "C:\Users\xxx\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\f0fc51a6-6a53-43a0-8dbf-2d223ea74432"
Using CATALINA_HOME: "D:\javaRuanJian\Tomcat\apache-tomcat-8.5.76"
Using CATALINA_TMPDIR: "D:\javaRuanJian\Tomcat\apache-tomcat-8.5.76\temp"
Using JRE_HOME: "D:\javaRuanJian\stibo\jdk1.8"
Using CLASSPATH: "D:\javaRuanJian\Tomcat\apache-tomcat-8.5.76\bin\bootstrap.jar;D:\javaRuanJian\Tomcat\apache-tomcat-8.5.76\bin\tomcat-juli.jar"
Using CATALINA_OPTS: ""
Connected to the target VM, address: '127.0.0.1:52143', transport: 'socket'
28-Dec-2023 16:33:57.599 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server.服务器版本: Apache Tomcat/8.5.76
28-Dec-2023 16:33:57.604 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器构建: Feb 23 2022 17:59:11 UTC
28-Dec-2023 16:33:57.604 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器版本号: 8.5.76.0
28-Dec-2023 16:33:57.604 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 操作系统名称: Windows 10
28-Dec-2023 16:33:57.604 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log OS.版本: 10.0
28-Dec-2023 16:33:57.604 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 架构: amd64
28-Dec-2023 16:33:57.604 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java 环境变量: D:\javaRuanJian\stibo\jdk1.8\jre
28-Dec-2023 16:33:57.605 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Java虚拟机版本: 1.8.0_121-b13
28-Dec-2023 16:33:57.605 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log JVM.供应商: Oracle Corporation
28-Dec-2023 16:33:57.605 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: C:\Users\zhuyanming5\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\f0fc51a6-6a53-43a0-8dbf-2d223ea74432
28-Dec-2023 16:33:57.605 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: D:\javaRuanJian\Tomcat\apache-tomcat-8.5.76
28-Dec-2023 16:33:57.605 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.util.logging.config.file=C:\Users\zhuyanming5\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\f0fc51a6-6a53-43a0-8dbf-2d223ea74432\conf\logging.properties
28-Dec-2023 16:33:57.606 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
28-Dec-2023 16:33:57.606 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:52143,suspend=y,server=n
28-Dec-2023 16:33:57.606 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -javaagent:C:\Users\zhuyanming5\AppData\Local\JetBrains\IntelliJIdea2020.3\captureAgent\debugger-agent.jar
28-Dec-2023 16:33:57.606 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcom.sun.management.jmxremote=
28-Dec-2023 16:33:57.606 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcom.sun.management.jmxremote.port=1097
28-Dec-2023 16:33:57.606 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcom.sun.management.jmxremote.ssl=false
28-Dec-2023 16:33:57.607 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcom.sun.management.jmxremote.password.file=C:\Users\zhuyanming5\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\f0fc51a6-6a53-43a0-8dbf-2d223ea74432\jmxremote.password
28-Dec-2023 16:33:57.607 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcom.sun.management.jmxremote.access.file=C:\Users\zhuyanming5\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\f0fc51a6-6a53-43a0-8dbf-2d223ea74432\jmxremote.access
28-Dec-2023 16:33:57.607 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.rmi.server.hostname=127.0.0.1
28-Dec-2023 16:33:57.607 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djdk.tls.ephemeralDHKeySize=2048
28-Dec-2023 16:33:57.607 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
28-Dec-2023 16:33:57.607 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dignore.endorsed.dirs=
28-Dec-2023 16:33:57.608 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcatalina.base=C:\Users\zhuyanming5\AppData\Local\JetBrains\IntelliJIdea2020.3\tomcat\f0fc51a6-6a53-43a0-8dbf-2d223ea74432
28-Dec-2023 16:33:57.608 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Dcatalina.home=D:\javaRuanJian\Tomcat\apache-tomcat-8.5.76
28-Dec-2023 16:33:57.608 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Djava.io.tmpdir=D:\javaRuanJian\Tomcat\apache-tomcat-8.5.76\temp
28-Dec-2023 16:33:57.608 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 使用APR版本[1.7.0]加载了基于APR的Apache Tomcat本机库[1.2.31]。
28-Dec-2023 16:33:57.608 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR功能:IPv6[true]、sendfile[true]、accept filters[false]、random[true]。
28-Dec-2023 16:33:57.609 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL配置:useAprConnector[false],useOpenSSL[true]
28-Dec-2023 16:33:57.616 信息 [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL成功初始化 [OpenSSL 1.1.1l 24 Aug 2021]
28-Dec-2023 16:33:57.865 信息 [main] org.apache.coyote.AbstractProtocol.init 初始化协议处理器 ["http-nio-8082"]
28-Dec-2023 16:33:58.085 信息 [main] org.apache.catalina.startup.Catalina.load Initialization processed in 1275 ms
28-Dec-2023 16:33:58.178 信息 [main] org.apache.catalina.core.StandardService.startInternal 正在启动服务[Catalina]
28-Dec-2023 16:33:58.179 信息 [main] org.apache.catalina.core.StandardEngine.startInternal 正在启动 Servlet 引擎:[Apache Tomcat/8.5.76]
28-Dec-2023 16:33:58.198 信息 [main] org.apache.coyote.AbstractProtocol.start 开始协议处理句柄["http-nio-8082"]
28-Dec-2023 16:33:58.296 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 208 ms
Connected to server
[2023-12-28 04:33:58,687] Artifact mams-rest:war exploded: Artifact is being deployed, please wait...
28-Dec-2023 16:34:08.251 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [D:\javaRuanJian\Tomcat\apache-tomcat-8.5.76\webapps\manager]
28-Dec-2023 16:34:09.144 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
28-Dec-2023 16:34:09.612 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[D:\javaRuanJian\Tomcat\apache-tomcat-8.5.76\webapps\manager]的部署已在[1,354]毫秒内完成
28-Dec-2023 16:34:53.859 信息 [RMI TCP Connection(3)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/JavaWork/HuaRun/GZEngine/gzengine/mams/mams-rest/target/mams-rest/WEB-INF/lib/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/JavaWork/HuaRun/GZEngine/gzengine/mams/mams-rest/target/mams-rest/WEB-INF/lib/logback-classic-1.2.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
28-Dec-2023 16:34:54.976 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal 一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件
28-Dec-2023 16:34:54.978 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal 由于之前的错误,Context[/mams-rest]启动失败
[2023-12-28 04:34:55,117] Artifact mams-rest:war exploded: Error during artifact deployment. See server log for details.
原因分析
1.接口404一般是访问路径不对,找不到对应的资源,反复确认路径无问题,打印断点接口也没有进来,推断tomcat启动起来,项目没有启动起来,具体要看项目层面的output日志,和tomcat层面的日志
2.tomcat日志报错显示栈溢出,导致栈溢出的原因很多,最常见的就是死循环。
3.output日志中的错误信息就比较明显了:Class path contains multiple SLF4J bindings. (类路径包含多个SLF4J绑定。),下面两行打印了具体包。所以基本可以判断是包冲突导致,需要排除不需要的包
问题解决
1.快速查看哪个依赖包含异常包,推荐使用idea的Maven Helper插件(如果没有安装,搜索install即可,这里不做赘述)
2.安装完Maven Helper插件,打开项目pom.xml文件,可以看到依赖分析按钮
3.点击依赖分析,搜索异常包,右键,排除
4.排除后更新maven依赖,重新clean+install项目正常启动
总结
该方案可以快速解决java依赖冲突问题,一般依赖冲突问题都可复用此方案
Maven Helper插件很好用,详细功能可自行百度