
wildfly 27 升级后,应用部署时提示 oracle jdbc 驱动类(如 array)不可访问,尽管管理控制台连接测试成功;根本原因是模块未正确暴露至应用类路径,需通过 manifest.mf 显式声明依赖。
wildfly 27 升级后,应用部署时提示 oracle jdbc 驱动类(如 array)不可访问,尽管管理控制台连接测试成功;根本原因是模块未正确暴露至应用类路径,需通过 manifest.mf 显式声明依赖。
在 WildFly 27 中,模块系统(基于 JBoss Modules)对类加载实施了更严格的隔离策略。即使 Oracle JDBC 驱动(如 ojdbc8.jar)已作为全局模块正确安装在 modules/system/layers/base/com/oracle/jdbc/main/ 下,并能在管理控制台中成功测试数据源连接(该操作由服务器自身类加载器执行),但应用部署时默认无法访问该模块的内部类——尤其是 oracle.sql.ARRAY、oracle.sql.STRUCT 等非标准 JDBC 类型,它们不属于 java.sql.* 标准 API,因此不会被自动导出或委托。
解决方法是在你的部署单元(WAR 或 EAR)的 META-INF/MANIFEST.MF 文件中,显式声明对 Oracle 模块的依赖,并确保关键包被导出:
Manifest-Version: 1.0 Dependencies: com.oracle.jdbc export
✅ 正确配置说明:
-
com.oracle.jdbc是 WildFly 中 Oracle 驱动模块的规范名称(需与modules/system/layers/base/com/oracle/jdbc/main/module.xml中的一致); -
export关键字至关重要:它将该模块的resources和exports(即节点中声明的包,如oracle.sql、oracle.jdbc)暴露给当前应用的类加载器,使ARRAY等类型可被反射加载或直接引用。
⚠️ 注意事项:
- 若使用 Maven 构建 WAR,可在
pom.xml中通过maven-war-plugin自动注入依赖:<plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-war-plugin</artifactid><configuration><archive><manifestentries><dependencies>com.oracle.jdbc export</dependencies></manifestentries></archive></configuration></plugin>
- 切勿将
ojdbc*.jar直接打包进WEB-INF/lib:这会导致类加载冲突,且无法复用 WildFly 管理的数据源连接池特性; - 检查
module.xml是否包含声明(WildFly 27 的官方 Oracle 模块默认已导出oracle.*,但仍建议验证); - 对于 EAR 部署,该
Dependencies条目应置于 EAR 根目录的META-INF/MANIFEST.MF,或各子模块的对应 MANIFEST 中(按需)。
完成配置后重新部署应用,Class.forName("oracle.sql.ARRAY") 及相关 DDL 操作即可正常工作。这一机制体现了 WildFly 27 对模块可见性(module visibility)的精细化控制,也是从旧版本迁移时最常被忽略的关键适配点。











