NoClassDefFoundError: com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig处理
根据老系统拷贝maven依赖新搭建了一个项目,启动抛异常如下:
Caused by: java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig
at org.springframework.orm.ibatis.SqlMapClientFactoryBean.<init>(SqlMapClientFactoryBean.java:103)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
... 56 more
ExternalTransactionConfig是ibatis-sqlmap的类,难道包没有引入?
查看项目依赖:
没有问题
查看当前model的依赖
也没有问题
分析:
NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。
我当前查看的依赖,在编译期间是没有问题的。可是已发布到tomcat就出错。
maven执行clean install,然后查看生成的war包
竟然木有ibatis-sqlmap包
查看pom文件,发现了问题之所在
知识拓展:
在maven的依赖管理中,有两种方式可以对依赖关系进行撤销,分别是可选依赖(Optional Dependencies)以及依赖排除(Dependency Exclusions)。
我们这里的optional标签就是可选依赖!
Project-A --> Project-B。Project-A中依赖B时设置 <optional>true</optional>
在编译项目A时,是可以正常通过的。如果有一个新的项目X依赖A,即:Project-X -> Project-A。此时项目X就不会依赖项目B了。
如果项目X用到了涉及项目B的功能,那么就需要在pom.xml中重新配置对项目B的依赖。
因此,去掉<optional>true</optional>进行强依赖!
重新编译运行,搞定!
结论:
1、NoClassDefFoundError是运行时在Java的classpath路径中,对应的类不可用导致的错误
参考:http://blog.csdn.net/jamesjxin/article/details/46606307
2、maven可选依赖<optional>true</optional>和依赖范围scope一样,使用时请慎重
NoClassDefFoundError: com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig处理的更多相关文章
- java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/mapping/result/BasicResultMap
错误日志: java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/mapping/result/BasicResultMap at ...
- com.ibatis.sqlmap.client.SqlMapException: There is already a statement named search in this SqlMap.
Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeExcep ...
- 解决Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext
我使用的是5.2.8的hibernate的jar包,运行的时候却报错Could not open Hibernate Session for transaction; nested exception ...
- 解决com.ibatis.sqlmap.client.SqlMapException: There is no statement named in this SqlMap
com.ibatis.sqlmap.client.SqlMapException: There is no statement named in this SqlMap. 可能存在3种情况: 1.在x ...
- spring整合hibernate时报错:org.hibernte.engine.transaction.spi.transactioncontext
错误提示:Caused by:java.lang.ClassNotFoundException: org.hibernte.engine.transaction.spi.transactioncont ...
- 解决Exception:Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext
原因是配置文件中 <bean id="transactionManager" class="org.springframework.orm.hibernate4.H ...
- ibatis sqlmap配置问题 “Check the IBatisNet.DataAccess.DaoSessionHandlers.SqlMapDaoSessionHandler.”
- The error occurred while configure DaoSessionHandler.- The error occurred in <property name=&qu ...
- ibatis SQLmap mysql模糊查询字符串拼的三种方法
在通常情况下iBATIS的参数在sqlmap中使用#param#的形式,参数名以’#’包着,但当使用sql的LIKE语句时就发生了问题,在单引号中无法使用#param#这种形式,下面列举出了3种方法来 ...
- ibatis(sqlmap)中使用in语句的方法
对于快速学习ibatis而没有过多时间去查阅资料的朋友,比如我,可能有些东西不一定能在快速上手的文档中涉猎到.今天就碰到一个问题,要在分页 查询的同时进行where语句删选操作.由于表记录比较少,因此 ...
随机推荐
- 为啥Spring和Spring MVC包扫描要分开?
背景: 最近在搭建新工程的时候发现有些Spring的配置不是很了解,比如Spring 配置里面明明配置了component-scan,为啥Spring MVC配置文件还需要配置一下,这样岂 ...
- java生成复杂word文档
在Web应用中,有时需要按照固定的模板将数据导出到Word,如流程审批单,在流程处理完成后将处理过程按照流程单的要求导出,有时程序中需要实现生成 标准Word文档,要求能够打印,并且保持页面样式不变, ...
- 用navigator.geolocation.getCurrentPosition在IOS10以上的系统无法定位
昨天老板告诉我代码有Bug(定位失败),于是各种测试最终发现IOS10以上版本手机不能成功(穷,买不起iphone,测试不完全),先贴失败代码: var city =""; nav ...
- c++ 封装线程库 2
1.2线程回收: 首先得知道线程的两个状态: Joinable Detached 简单理解,如果一个线程是joinable的状态,那么这样的线程,就必须使用pthread_join来回收,否则程序结束 ...
- pip安装flask问题解决
环境:python 2.7 pip install virtualenv pip install flask 提示成功但无效 查看http://docs.jinkan.org/docs/flask/i ...
- 主席树-----动态开点,不hash
POJ - 2104 第k大 #include <cstdio> #include <cstdlib> #include <cstring> #include &l ...
- CAD安装失败怎样卸载CAD 2014?错误提示某些产品无法安装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- php用户注册页面利用js进行表单验证
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C# 获取格式
1. 身份证日期 DateTime.ParseExact((IDCard.Substring(6, 8)), "yyyyMMdd", System.Globalization.Cu ...
- synchronized + volatile + ThreadLocal
线程的共享 synchronized + volatile + ThreadLocal <1> synchronized 锁住的是对象,当用它来锁住一个类时,实际上也是锁的一个对象. ...