Spring版本升级后Tomcat部署WAR包出现FileNotFoundException求助
我们将应用从Spring 4.3.2.RELEASE 升级至 4.3.30.RELEASE 后,在以下环境部署.war包时出现FileNotFoundException:
- JDK:8
- Tomcat:8
- Spring:4.3.30.RELEASE
已通过Maven War插件配置排除旧版本JAR,且确认WEB-INF/lib中无*-4.3.2.RELEASE.jar文件,但系统仍在查找spring-core-4.3.2.RELEASE.jar。
Maven配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> <configuration> <webappDirectory>${env.WAR_PATH}</webappDirectory> <packagingExcludes>WEB-INF/lib/*-4.3.2.RELEASE.jar</packagingExcludes> </configuration> </plugin>
异常栈信息:
java.io.FileNotFoundException: /opt/tomcat/{appName}/WEB-INF/lib/spring-core-4.3.2.RELEASE.jar (No such file or directory) java.util.zip.ZipFile.open(Native Method) java.util.zip.ZipFile.<init>(ZipFile.java:219) java.util.zip.ZipFile.<init>(ZipFile.java:149) java.util.jar.JarFile.<init>(JarFile.java:166) java.util.jar.JarFile.<init>(JarFile.java:103) org.apache.catalina.webresources.AbstractArchiveResourceSet.openJarFile(AbstractArchiveResourceSet.java:308) org.apache.catalina.webresources.JarResourceSet.getArchiveEntry(JarResourceSet.java:119) org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:260) org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281) org.apache.catalina.webresources.Cache.getResource(Cache.java:63) ...
清理Tomcat缓存与残留
- 停止Tomcat,删除
work/Catalina/localhost/{appName}下的所有缓存文件,这些缓存可能留存了旧依赖的路径记录。 - 清空Tomcat的
temp目录,避免临时文件残留导致的引用异常。 - 检查
webapps目录,确认是否存在旧版本应用的解压文件夹,若有则彻底删除。
- 停止Tomcat,删除
排查Maven依赖树
执行mvn dependency:tree命令,查看所有依赖的传递关系,确认是否有第三方依赖仍引用Spring 4.3.2.RELEASE版本。如果发现,在对应依赖中添加<exclusions>节点排除旧版本Spring包。检查配置文件中的硬编码引用
- 搜索项目内所有配置文件(如
applicationContext.xml、web.xml、.properties/.yml文件),查看是否存在硬编码的spring-core-4.3.2.RELEASE.jar路径或版本引用。 - 检查自定义类加载器、资源加载相关代码,确认是否有硬指定该JAR的逻辑。
- 搜索项目内所有配置文件(如
验证WAR包内的Manifest文件
解压WAR包,查看META-INF/MANIFEST.MF文件,检查Class-Path属性是否引用了旧版本Spring JAR。若有,修改Maven配置移除该引用。检查Tomcat全局依赖
查看Tomcat的lib目录,确认是否存在Spring 4.3.2.RELEASE的JAR;同时检查conf/catalina.properties文件,确认是否有共享依赖配置引用了该旧版本JAR。重新构建并校验WAR包
执行mvn clean package重新构建,确保构建过程清除了旧依赖缓存。构建完成后,再次解压WAR包,确认WEB-INF/lib中无*-4.3.2.RELEASE.jar,同时检查包内其他文件是否存在旧版本路径引用。
内容的提问来源于stack exchange,提问作者Thinkers Hive

