启动tomcat出现java.lang.ClassNotFoundException分析与解决

1.问题现象

现在很多项目都是使用maven构建,我在项目中依赖使用了<optional>true</optional>, 目的是不想依赖传递,但是启动项目的时候出现java.lang.ClassNotFoundException,于是在网上搜了好多资料也没有解决。 自己回想做过什么操作,怀疑自从该依赖使用了<optional>true</optional>服务就启动保存,因此怀疑<optional>true</optional>并不只是不传递依赖可能还有其他作用。

2.查阅资料

从Maven官网上搜了一下资料 maven官网,从中看到了一句很重要的话。

Why use optional dependencies?
Optional dependencies save space and memory. They prevent problematic jars that violate a license agreement or cause classpath issues from being bundled into a WAR, EAR, fat jar, or the like.

是不是有种恍然大悟的感觉,optional的作用主要是

  • 节约空间和内存
  • 防止违背许可协议和类路径问题被打进WAR, EAR, fat jar等中。

3.问题分析

tomcat启动时出现java.lang.ClassNotFoundException异常基本都是jar包没有引用到或者引用的jar有误。此时最好要分析引用jar包是否有冲突,大多数情况都是冲突造成的(项目中有多个版本依赖)。 但是我目前遇到的这种情况是由于使用<optional>true</optional>造引用jar包并没有被打进war包中,原因是没有license agreement,从而启动报错。

4.问题解决

去掉<optional>true</optional>以后,然后重新梳理依赖关系,问题解决。

5.问题总结

不管使用什么软件都需要了解其使用和原理,这样出了问题才能游刃有余,最好能通过官网了解其特性,软件官网最好的学习资料。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Maven的基本了解 什么是Maven? Maven就是Apache下的一个开源项目。它是用纯java开发的。是一...
    Bcome阅读 8,000评论 0 7
  • 一、maven的两个作用 项目自动化构建,通过命令行就可以完成整个项目构建过程,不需要我们手动地进行项目构建 管理...
    lifeline张阅读 4,284评论 0 1
  • The Basics POM文件包含关于项目的所有必要信息,以及在构建项目过程中使用的插件配置。它是一个对于"wh...
    亼珏阅读 5,796评论 0 2
  • 一. 简介 Maven 是 Apache 组织下的一个跨平台的项目管理工具,它主要用来帮助实现项目的构建、测试、打...
    wind_sky阅读 3,803评论 0 0
  • Jar包冲突是老生常谈的问题,几乎每一个Java程序猿都不可避免地遇到过,并且也都能想到通常的原因一般是同一个Ja...
    sherlockyb阅读 37,624评论 1 65