升级SMBJ替代JCIFS后出现ClassNotFoundException问题求助
解决SMBJ依赖导致的ClassNotFoundException问题
这种类找不到的坑我之前在替换遗留项目依赖的时候踩过,咱们一步步来排查解决:
1. 先确认WebProject的类路径中是否存在SMBJ依赖包
你提到com.hierynomus.mssmb2.SMBApiException存在于smbj-0.9.1.jar中,首先要检查WebProject的WEB-INF/lib目录里有没有这个JAR文件。
- 旧版本的MyProject.jar可能是把JCIFS的类直接打包在了自身JAR里,或者WebProject原本就配有JCIFS的依赖包;但升级到SMBJ后,你的MyProject.jar现在依赖SMBJ,而WebProject里并没有添加对应的
smbj-0.9.1.jar,导致Tomcat启动时找不到这个类。 - 如果确实没有,把
smbj-0.9.1.jar复制到WebProject的WEB-INF/lib目录,重新部署后再启动Tomcat试试。
2. 检查MyProject.jar的打包是否包含了SMBJ依赖
如果你希望MyProject.jar自身包含所有依赖(像旧版本JCIFS那样),那需要确认Eclipse导出JAR时的配置:
- 打开Eclipse的导出JAR向导,在“处理所需的库”步骤中,选择**“将所需的库打包到生成的JAR中”或者“提取到生成的JAR中”**,而不是“复制到生成的JAR所在的子目录中”(这个选项会把依赖放在外部,WebProject单独运行时找不到)。
- 导出完成后,可以用压缩工具打开MyProject.jar,查看里面是否有
com/hierynomus开头的目录结构,如果有,说明依赖已经打包进去了;如果没有,重新按正确配置导出JAR。
3. 清理Tomcat缓存并确认部署文件
有时候Tomcat的旧缓存会干扰类加载,或者手动替换JAR时没同步到部署目录:
- 关闭Tomcat,删除Tomcat安装目录下
work/Catalina/localhost/ngsf路径下的所有文件(这是Tomcat生成的临时类文件)。 - 检查Tomcat的
webapps/ngsf/WEB-INF/lib目录,确认里面的MyProject.jar是最新版本,且如果需要的话,smbj-0.9.1.jar也存在于此。
4. 排查类加载冲突(可能性较低)
如果上面的步骤都没解决,可以检查是否有类加载冲突:
- 查看Tomcat的
lib目录(全局共享库)里是否存在其他版本的SMBJ或者相关冲突JAR,如果有,移除这些冲突文件,避免类加载优先级问题。
内容的提问来源于stack exchange,提问作者lemoncodes
相关产品推荐
相关产品推荐

