NoClassDefFoundError: com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig处理
2017-06-13 14:07
429 查看
根据老系统拷贝maven依赖新搭建了一个项目,启动抛异常如下:
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一样,使用时请慎重
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一样,使用时请慎重
相关文章推荐
- com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser
- com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser
- java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/mapping/result/BasicResultMap
- jboss Spring :Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML.
- IBATIS异常com.ibatis.sqlmap.client.SqlMapException: There is no statement named
- com.ibatis.sqlmap.client.SqlMapException: There is no statement named Control.insert-control in this SqlMap.
- com.ibatis.sqlmap.client.SqlMapException: There is no statement named in this SqlMap.
- ibatis sqlMapConfig settings 中属性用法
- 从IBatis2.X 移植到IBatis3.0 sqlMapConfig and sqlMap XML 配置文件升级说明
- IBATIS配置文件sqlmap-config.xml之乱配
- ibatis学习笔记(二)>>>>>>>sqlMapConfig.xml文件详解
- 动手改造Ibatis,使其支持文件系统存储数据列 之 源码下载编译和SqlMapConfig解析
- IBatis ORM框架的总配置文件SqlMapConfig.xml 详细信息
- SqlMapConfig.xml是ibatis连接数据库的配置文件
- ibatis之SqlMapConfig.xml配置详解
- Ibatis SqlMapConfig.xml Settings 详解
- ibatis之SqlMapConfig.xml文件的Settings节点参数详解
- com.ibatis.sqlmap.client.SqlMapException 错误
- ibatis连接数据库的配置文件SqlMapConfig.xml---解析
- iBatis.Net的SqlMap.config文件