问题描述:
新项目首次部署到linux环境时,tomcat启动成功(startup.bat窗口无报错,能访问到8080端口tomcat页面),访问项目所有接口均为404。
定位过程:
查看webapps/logs下catalina日志,启动过程中其实是有打印报错日志的,但是在窗口不显示。报错为:
SLF4J: Class path contains multiple SLF4J bindings…
即:class path包括多个slf4j绑定,后面几行分别是不同的slf4j的jar包路径。
很明显是jar包冲突。解决方法有两种:手动删除或者使用maven的exclusion。
解决:
1.手动删除。这个比较简单,根据提示上的路径,直接到lib文件夹下删除不需要的jar包,再重启tomcat。
方法简单粗暴,适合一次性部署的时候使用,因为下次再打包部署,还是会有这些jar包,不能部署一次就手动删除一次吧?因此推荐第二种方法。
2.使用maven的exclusion。首先确定冲突的jar包是哪个依赖(dependency)传进来的,可以在项目pom.xml所在文件夹下,打开cmd窗口,运行mvn dependency:tree >tree.txt,看冲突的jar包是哪个依赖引入的,修改pom.xml,在该dependency里加上<exclusions>来排除依赖。
tips:怎么确定哪些是不需要的jar包?实在不能确定,可以先删除然后试试项目能不能启动成功,并且jar包对应的功能不受影响。特别是用于打印日志的,删除并且启动项目后要测试日志能不能打印,不然以后要定位问题没日志就尴尬了~