Eclipse RCP应用加载ucanaccess.jar驱动的报错问题解决咨询
Eclipse RCP 加载UCanAccess JDBC驱动类加载异常解决方案
该问题核心原因是Eclipse RCP基于OSGi框架实现类隔离机制,不会读取系统
CLASSPATH环境变量,也不识别JVM启动参数-classpath的配置,因此标准Java应用中可行的驱动加载逻辑在RCP场景下无法正常工作,通常会出现两类报错:
- 主动调用
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver")时抛出ClassNotFoundException- 跳过类加载直接构造数据库连接时抛出
java.sql.SQLException: No suitable driver found for jdbc:ucanaccess://<文件路径>
修复操作步骤
- 将UCanAccess及其依赖包转换为OSGi插件
你需要将UCanAccess核心jar包、以及它的所有依赖包(jackcess、hsqldb、commons-lang、commons-logging)统一导入为Eclipse插件项目,操作路径:Eclipse菜单栏 → File → New → Other → Plug-in from Existing JAR Archives,选中所有需要的jar包后按照向导完成插件创建,创建时确保导出net.ucanaccess.jdbc等核心API包。 - 业务插件添加依赖配置
打开你的RCP业务插件的MANIFEST.MF文件,切换到Dependencies标签页,添加刚才创建的UCanAccess插件作为依赖,勾选Reexport this dependency选项,确保业务插件的类加载器可以正常访问驱动类。 - 调整驱动加载逻辑
不要使用Class.forName()方式加载驱动,改用直接实例化注册的方式避开类加载器隔离问题,示例代码如下:import net.ucanaccess.jdbc.UcanaccessDriver; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class AccessDbUtil { public static Connection getAccessConnection(String dbFilePath) throws SQLException { // 直接实例化驱动注册到DriverManager DriverManager.registerDriver(new UcanaccessDriver()); return DriverManager.getConnection("jdbc:ucanaccess://" + dbFilePath); } } - 验证产品启动配置
打开RCP产品的.product配置文件,切换到Dependencies标签页,点击「Add Required Plug-ins」按钮,自动补全所有依赖插件,确保UCanAccess相关插件被加入到运行时配置中,避免启动时缺失依赖。
内容的提问来源于stack exchange,提问作者Randall S. Becker
相关产品推荐
相关产品推荐

