根据老系统拷贝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一样,使用时请慎重

最新文章

  1. Lucene热词显示并选择
  2. Oracle存储过程(转)
  3. C# 命令绑定
  4. vagrant yii2 Exception &#39;yii\db\Exception&#39; with message &#39;SQLSTATE[HY000] [2002]
  5. python 的内建函数
  6. UVa10000_Longest Paths(最短路SPFA)
  7. C++ Builder中splitter控件的使用方法简介
  8. JS取消浏览器文本选中的方法
  9. 【BZOJ2190】仪仗队(数论)
  10. java~springboot~ibatis数组in查询的实现
  11. 【入门】Spring-Boot项目配置Mysql数据库
  12. 2019年美国大学生数学建模竞赛(MCM/ICM) E题解题思路
  13. Yaml语法使用
  14. 7Linux存储结构和磁盘划分
  15. docker logs 查看实时日志
  16. python的Web框架:初识Django
  17. Jquery操作属性
  18. Provider Pattern for Beginners in .net
  19. VSTS 免费代码git/tfs托管体验-使用代码云托管
  20. re模块 ,random模块

热门文章

  1. Hibernate通过自编写sql查询
  2. regular expression, grep (python, linux)
  3. Murano Weekly Meeting 2016.07.26
  4. supermarket SSM
  5. C# params 动态参数
  6. [Environment Build] Win10下配置Apach Tomcat
  7. UrShop 商城系统介绍
  8. jquery 根据日期计算年龄
  9. Design Pattern -&gt;Bridge
  10. Android 实现朋友圈有图片和视频