Tomcat 引入jar包导致的 NoClassDefFoundError 报错的问题解决

问题处理

今天在慕课网上学习时用到了一个问题:在 Tomcat 下跑项目时 new SAXreader(); 方法不执行。项目运行到 SAXReader reader = new SAXReader(); 时直接跳出整个方法,没有执行后面的代码,且控制台没有报错信息。

我使用 Maven 构建项目,pom 文件中的确引入了相关依赖,而且是目前最新的版本,不存在版本不兼容问题。

	<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
	<dependency>
	    <groupId>dom4j</groupId>
	    <artifactId>dom4j</artifactId>
	    <version>1.6.1</version>
	</dependency>

我在课程下方的评论处也看见有人遇到了同样的问题(原问题链接),然而并没有人回答。我在 Google,Stack Overflow 也没有找到有效的解决方法。


后来我突然想到以前手动引入 jar 包时常发生的一个问题,就是Tomcat 启动时默认在安装目录下的 lib 文件夹下寻找 jar 包,可能你将 jar 包下载到了项目目录下,而 Tomcat 的目录下没有该 jar 包,那么程序可以编译成功,但运行时就抛出 ClassNotFound 的异常。

于是我去看了下 Tomcat 下的 lib 目录,里面果然没有 dom4j 的相关 jar 包,Maven 默认将 jar 包下载到了 user 下的 .m2/repository 文件夹中,于是我把 jar 包复制过去,方法即可运行。

然而出现另外一个错误,发现 XStream 方法也出现了同样的问题,于是我把 xstream.jar 和 xmlpull.jar (XStream 依赖的 jar 包)也复制了过去,结果程序运行成功。


遗留的问题

Maven 所下载的 jar 包是否可以通过配置自动复制到 Tomcat 目录下,或者 Tomcat 启动时是否可以增加搜索 jar 包的位置,每次都手动的复制会造成许多不方便。

发布了40 篇原创文章 · 获赞 286 · 访问量 49万+

猜你喜欢

转载自blog.csdn.net/qq_40950957/article/details/82949540