根据老系统拷贝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处理的更多相关文章

  1. java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/mapping/result/BasicResultMap

    错误日志: java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/mapping/result/BasicResultMap     at ...

  2. 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 ...

  3. 解决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 ...

  4. 解决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 ...

  5. spring整合hibernate时报错:org.hibernte.engine.transaction.spi.transactioncontext

    错误提示:Caused by:java.lang.ClassNotFoundException: org.hibernte.engine.transaction.spi.transactioncont ...

  6. 解决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 ...

  7. ibatis sqlmap配置问题 “Check the IBatisNet.DataAccess.DaoSessionHandlers.SqlMapDaoSessionHandler.”

    - The error occurred while configure DaoSessionHandler.- The error occurred in <property name=&qu ...

  8. ibatis SQLmap mysql模糊查询字符串拼的三种方法

    在通常情况下iBATIS的参数在sqlmap中使用#param#的形式,参数名以’#’包着,但当使用sql的LIKE语句时就发生了问题,在单引号中无法使用#param#这种形式,下面列举出了3种方法来 ...

  9. ibatis(sqlmap)中使用in语句的方法

    对于快速学习ibatis而没有过多时间去查阅资料的朋友,比如我,可能有些东西不一定能在快速上手的文档中涉猎到.今天就碰到一个问题,要在分页 查询的同时进行where语句删选操作.由于表记录比较少,因此 ...

随机推荐

  1. SpringBoot中使用Servlet

    1.在入口Application类上加入注解@ServletComponentScan @SpringBootApplication @ServletComponentScan public clas ...

  2. js中的内置对象

    在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质.注意:通过字面量创建的对象在调用属性和 ...

  3. Zookeeper配置Kafka

    Zookeeper安装 解压:tar -zxvf zookeeper-3.4.5-cdh5.7.0.tar.gz -C ~/app/ 配置到环境变量: vi ~/.bash_profile expor ...

  4. Hadoop2.X分布式集群部署

    本博文集群搭建没有实现Hadoop HA,详细文档在后续给出,本次只是先给出大概逻辑思路. (一)hadoop2.x版本下载及安装 Hadoop 版本选择目前主要基于三个厂商(国外)如下所示: 基于A ...

  5. 打乱式排序的Java版实现

    项目中涉及到对大批量的数据进行打乱式排序,大概原理如下: 输入源数据:1,1,2,3,3,3,4,4 输出结果:   1,2,3,4,1,3,4,3 实现代码如下,采用递归的思想: static &l ...

  6. httpd.conf 配置

    # # This is the main Apache server configuration file. It contains the # configuration directives th ...

  7. case when then[转]

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  8. 【小程序报错】 TLS 版本必须大于等于 1.2

    服务器是windows 2008 server 环境是IIS7SSL是申请用的阿里免费.微信小程序发现wx.request,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2 直接说解决办法吧 ...

  9. h5:erver-Sent Events

    对于一般的 Web 应用开发,大多数开发人员并不陌生.在 Web 应用中,浏览器和服务器之间使用的是请求 / 响应的交互模式.浏览器发出请求,服务器根据收到的请求来生成相应的响应.浏览器再对收到的响应 ...

  10. Eclipse plug-in startup

    Plug-in Startup !SESSION 2013-09-02 16:28:29.546 -----------------------------------------------ecli ...