Java模块化环境下JDBC连接Oracle报错的解决方法
解决方案
问题根源
在Java模块化环境中,所有依赖的模块必须显式声明,而非模块化环境(类路径模式)会自动加载所需的类和依赖。你的场景中:
- 使用LDAP格式的JDBC URL需要依赖
java.naming模块(提供JNDI相关功能),但原module-info.java未声明该依赖; - Oracle JDBC驱动(ojdbc11)是模块化组件,必须显式声明依赖才能让JVM加载它。
修改module-info.java
将你的模块描述文件修改为以下内容:
module sandbox2 { exports dm; requires java.sql; // 声明JNDI模块依赖,支持LDAP连接 requires java.naming; // 声明Oracle JDBC驱动模块依赖 requires com.oracle.database.jdbc.ojdbc11; }
额外说明
requires com.oracle.database.jdbc.ojdbc11:该模块名与Maven依赖的artifactId对应,ojdbc11从21.x版本开始正式支持Java模块化;- 如果仍然遇到权限相关问题(比如驱动无法访问内部API),可以在运行时添加JVM参数:
该参数允许驱动模块访问--add-opens java.base/java.net=com.oracle.database.jdbc.ojdbc11java.net包的内部类,用于LDAP主机解析。
内容的提问来源于stack exchange,提问作者Marcus Bleil
相关产品推荐
相关产品推荐

