开发Eclipse插件时遇SMBJ类未找到:ClassNotFoundException异常
以下是排查和解决的关键步骤:
检查OSGi包导入配置
Eclipse插件基于OSGi框架,仅配置Bundle-Classpath不足以让类加载器找到SMBJ的类,必须在MANIFEST.MF的Import-Package中声明所需的SMBJ包,比如:Import-Package: com.hierynomus.smbj, com.hierynomus.smbj.auth, com.hierynomus.smbj.connection, // 按需添加其他用到的SMBJ子包注意要覆盖插件代码中实际用到的所有SMBJ相关包。
确认Bundle-Classpath与build.properties的一致性
确保MANIFEST.MF的Bundle-Classpath正确指向嵌入的SMBJ及其依赖jar,例如如果jar放在插件项目的lib目录下,配置应为:Bundle-Classpath: ., lib/smbj.jar, lib/smbj-utils.jar, // 其他依赖jar同时在
build.properties的bin.includes中包含这些jar路径:bin.includes = META-INF/, ., lib/smbj.jar, lib/smbj-utils.jar验证导出插件的内容完整性
解压导出的插件jar文件,检查是否包含SMBJ及其依赖jar(比如在lib目录下),或者确认SMBJ的类文件是否被正确打包到插件jar中。如果jar未被包含,说明导出配置有误,需重新检查导出向导的设置,确保勾选了包含第三方库。排查依赖缺失
SMBJ依赖其他库(如slf4j、bouncycastle等),确保这些依赖也被嵌入到插件中或通过Import-Package导入对应的OSGi包。如果依赖库未正确包含,会间接导致SMBJ类无法加载。考虑使用Tycho构建插件
手动管理OSGi依赖容易出错,建议使用Tycho(基于Maven的Eclipse插件构建工具),通过Maven依赖引入SMBJ,Tycho会自动处理OSGi的Import-Package和打包配置,减少手动配置的失误。
内容的提问来源于stack exchange,提问作者jrao

