Liferay7.2自定义JSP Hook中使用JournalArticle类报错求助
Liferay PortalHook自定义JSP导入JournalArticle报错修复方案
报错根因
仅可导入类型,com.liferay.journal.model.JournalArticle被识别为包属于Liferay自定义JSP场景的典型类加载问题,触发原因有两个:
- pom依赖配置错误,你引入的
com.liferay.journal.pai为拼写错误,正确artifactId为com.liferay.journal.api - PortalHook模块的依赖默认不会暴露给JSP编译上下文,Tomcat编译JSP使用的类加载器无法识别模块内引入的依赖
修复步骤
- 修正pom依赖配置
替换原有错误的journal依赖,注意版本必须和你当前Liferay运行环境内置的journal api版本完全一致,scope固定为provided避免类冲突:
<dependency> <groupId>com.liferay</groupId> <artifactId>com.liferay.journal.api</artifactId> <version>你环境匹配的版本号</version> <scope>provided</scope> </dependency>
- 配置CustomJspBag类加载器
在你实现的XCustomJspBag类中重写getClassLoader方法,返回当前模块的类加载器,让JSP编译时可以读取模块的依赖配置:
@Override public ClassLoader getClassLoader() { return XCustomJspBag.class.getClassLoader(); }
- 清理缓存重新部署
- 停止Tomcat服务
- 完全清空Tomcat work目录缓存:
C:\x\bundles\tomcat-9.0.17\work\Catalina\localhost\ROOT\ - 清空Liferay实例
osgi/state目录下的所有缓存文件 - 重新构建部署PortalHook模块,启动Tomcat
验证方案
如果修复后仍存在报错,可先去掉JSP的导入语句,直接用全类名调用验证类可见性:
<% com.liferay.journal.model.JournalArticle article = null; // 后续业务逻辑 %>
全类名调用无报错则为导入语句的缓存问题,重复清理work目录重启即可解决。
内容的提问来源于stack exchange,提问作者DyM
相关产品推荐
相关产品推荐

