JavaWeb以Maven整合Mybatis报错java.lang.NoClassDefFoundError(Web项目未能完全加载Maven下的依赖)
问题描述
为完成学校课程一个javaweb的demo,想着对数据库的访问能够更加简洁,所以用了Mybatis。因为之前有过Springboot整合Mybatis经验,所以本以为事情会简单。在Junit的测试类中是能够正常对数据库进行CRUD。在Javaweb的Servlet类中调用数据访问的 接口编译没错。但实际对servlet发起请求时报错。-->运行时报错。
创建一个数据的访问DAO做为单例类。 通过类静态方法返回该单例对象。userMapper单一数据访问的实例。
public class OnlyStatement {
private OnlyStatement(){
}
private static class RealMapper{
private static userMapper userMapper;
static {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取SqlSession对象
SqlSession session = sqlSessionFactory.openSession(true);
//获取Mapper接口代理对象
userMapper = session.getMapper(userMapper.class);
}
}
public static userMapper MYgetInstance() {
return RealMapper.userMapper;
}
}
查看日志是在加载资源时 java.lang.NoClassDefFoundError
通过target(项目编译的生成结果)查看Mybatis和mysql的依赖jar是否已经添加到lib,这里就有个问题:
为什么maven的其他依赖的jar包(如Servlet ,JSTL)都能被添加到lib,而mysql和mybatis的jar包却无法添加?
产生该问题时的target生成目录下的lib目录: (缺失)
我们用Maven来管理web项目的目的是为了添加Jar包可以直接以添加依赖的方式进行,而不需要手动去相应的网站下载,同时能够自动导入到当前项目。
解决方法
第一种方法:手动添加jar包
此时重新部署
查看日志无报错,demo正常运行。
第二种方法:
自己捣鼓配置成功的一个方法:
然后重新编译部署,最终也使得web项目成功运行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?