Lotus Notes Domino结合JDK 11使用Java API收发邮件时Session创建报错问题求助
解决JDK 11下Lotus Notes Java API创建Session时的CORBA依赖问题
你遇到的这个错误本质上是JDK 11的模块移除导致的兼容性坑——从JDK 9开始,CORBA相关模块(包括org.omg.CORBA)就被标记为废弃,到JDK 11直接被彻底移除了,而Lotus Notes的Java API底层依赖CORBA来和Notes客户端/服务器通信,所以才会出现找不到org.omg.CORBA.UserException类的报错。
快速解决方法
1. 手动补充CORBA依赖包
因为JDK11不再自带这些类,你需要把缺失的CORBA相关Jar包引入到项目中:
- 如果用Maven/Gradle构建项目,可以直接引入OpenCORBA的官方依赖,比如Maven的配置:
<dependency> <groupId>org.jacorb</groupId> <artifactId>jacorb</artifactId> <version>3.9</version> </dependency> - 要是不用构建工具,也可以从OpenCORBA项目下载
jacorb.jar和jacorb-omgapi.jar,手动添加到项目的类路径里。 - 别忘了确保项目已经正确引入Lotus Notes的核心API包
Notes.jar,这个Jar一般在Notes客户端安装目录的jvm/lib/ext文件夹下。
2. 切换本地客户端调用模式(适合本地运行场景)
如果你的程序是在安装了完整Lotus Notes客户端的机器上运行,可以尝试直接调用本地客户端的二进制文件来创建Session,减少对CORBA远程调用的依赖:
import lotus.domino.*; public class TestDomino { public static void main(String[] args) { try { // 替换成你的Notes客户端实际安装路径 System.setProperty("notes.binary", "C:\\Program Files\\IBM\\Notes"); Session s = NotesFactory.createSessionWithFullAccess(); // 后续的邮件发送/提取操作逻辑 } catch (NotesException e) { e.printStackTrace(); } } }
这种方式绕开了CORBA的远程调用依赖,直接和本地Notes客户端交互,稳定性会更好,但前提是本地必须安装了完整的Lotus Notes客户端。
3. 确认Notes版本适配
虽然IBM没有官方明确声明Lotus Notes Java API支持JDK11,但通过补充CORBA依赖的方式,邮件发送、提取这类基础功能是可以正常运行的。如果后续遇到其他兼容性问题,建议升级你的Notes客户端到9.0.1 FP10及以上版本,这个版本对高版本JDK的兼容性会更好。
内容的提问来源于stack exchange,提问作者Idrees Samim
相关产品推荐
相关产品推荐

