如何解决Xpages构建后出现的‘Xpage类无法找到’问题?
这种XPage编译后类找不到的问题我碰到过好几次,咱们一步步来拆解排查:
从你提供的日志和描述来看,核心问题是XPage编译生成的类文件没有被正确写入NSF,或者服务器无法加载这些类——不管是重新保存现有XPage、重命名还是复制都触发问题,跨工作站操作也一样,说明问题大概率出在服务器端配置或者NSF本身,而非单个Designer环境。
1. 优先修复Java版本兼容问题
你的Domino服务器用的是Java 8(JRE 1.8.0),但Domino Designer的JDK兼容级别设为1.5,还装了JRE 1.6,这是个高危的不兼容点:
- Domino 9及以后版本(对应你用的Java 8服务器),推荐Designer的JDK兼容级别设置为1.8,同时Designer要安装和服务器一致的Java 8 JRE。
- Java版本不匹配会导致编译后的字节码在服务器上无法被正确加载,甚至Designer编译失败却没提示。
- 操作步骤:打开Designer → 偏好设置 → Java → 编译器 → 把「编译器合规级别」改成1.8;再到Java → 已安装的JREs里,切换到Java 8版本。
2. 清理NSF与服务器的编译缓存
XPage编译后的类会存在NSF的隐藏缓存区域,一旦缓存损坏就会出现类找不到的情况:
- 在Domino服务器控制台执行命令:
重启HTTP任务,强制清理XSP相关缓存。tell http osgi ss com.ibm.xsp tell http restart - 在Designer里对NSF执行「清理项目」操作(右键NSF → 应用程序 → 清理),然后重新构建项目(右键NSF → 应用程序 → 构建)。
- 极端情况下,可把NSF复制到本地,删除
WEB-INF/classes和WEB-INF/lib下的编译文件,再重新上传到服务器。
3. 检查服务器的XSP编译配置
服务器端的XSP编译配置可能被错误修改,导致无法生成或加载类:
- 打开Domino服务器的
xsp.properties文件(通常在domino/data/domino/workspace/applications/对应NSF目录下,或服务器全局的xsp.properties),检查以下参数:xsp.compile.mode:确保设为recompile或auto(不要设为off)xsp.classloader.cache.enabled:如果是true,可临时改成false,重启HTTP后测试
- 同时检查服务器上
domino/workspace目录的权限,确保Domino服务器用户有读写权限——权限不足会导致编译后的类文件无法写入缓存。
4. 排查NSF设计元素损坏
如果以上步骤都无效,可能是NSF本身的设计元素损坏:
- 尝试把出问题的XPage导出为XML文件,删除NSF里的该XPage,再重新导入XML文件并保存测试。
- 用Domino Designer的「设计诊断」工具(菜单 → 工具 → 设计诊断)检查NSF的设计元素是否有损坏,修复检测到的问题。
- 最后可尝试创建一个新的空白NSF,把现有XPage和相关设计元素复制进去测试——如果新NSF正常,说明原NSF存在损坏。
日志关键信息解读
从你提供的xpages_exec日志里,这段错误是核心线索:
Caused by: java.lang.ClassNotFoundException: Cannot find class xsp.Cards in NSF at com.ibm.domino.xsp.module.nsf.ModuleClassLoader$DynamicClassLoader.findClass(ModuleClassLoader.java:503)
这明确说明服务器在NSF的类加载器里找不到xsp.Cards类,要么是Designer没把编译后的类写入NSF,要么是服务器无法读取这些类——和前面提到的Java版本不兼容、缓存损坏、权限问题直接相关。
内容的提问来源于stack exchange,提问作者teleman

