Liferay 7.4-ga107导入PortalUUID类报错的解决求助
问题描述
我在IntelliJ中开发Liferay portal-7.4-ga107的留言板训练应用,严格遵循官方教程操作,重复3次流程后,在完成"Integrating the Back-end"步骤部署模块/portlet时,始终遇到编译错误:
error: cannot find symbol
import com.liferay.portal.kernel.uuid.PortalUUID;
^
symbol: class PortalUUID
location: package com.liferay.portal.kernel.uuid
该错误来自自动生成的持久化类中的导入语句:
import com.liferay.portal.kernel.uuid.PortalUUID; // IDE标记为红色
在持久化类中,PortalUUID仅用于两处:
@Reference private PortalUUID _portalUUID;
以及:
String uuid = _portalUUID.generate();
使用环境:JDK 8、Gradle 6.9.2。尝试过将PortalUUID替换为PortalUUIDUtil,代码无编译报错,但部署guestbook-web模块后,门户中未显示该portlet;尝试调用PortalUUIDUtil.getPortalUUID();时,IDE提示该方法不存在。
解决步骤
1. 替换为Liferay 7.4支持的UUID生成API
Liferay 7.4 GA107中,com.liferay.portal.kernel.uuid.PortalUUID已被移除,正确的UUID生成工具类是com.liferay.portal.kernel.util.UuidUtil。
2. 修改持久化类代码
按以下步骤调整代码:
- 删除
import com.liferay.portal.kernel.uuid.PortalUUID;导入语句 - 删除
@Reference注解和private PortalUUID _portalUUID;字段 - 将UUID生成代码替换为:
String uuid = UuidUtil.generate();
- 添加正确的导入:
import com.liferay.portal.kernel.util.UuidUtil;
3. 重新构建部署
在项目根目录执行Gradle命令完成构建部署:
./gradlew clean build deploy
4. 排查portlet未显示问题
如果替换后portlet仍不显示,检查:
- 确认
guestbook-web模块的liferay-portlet.xml/portlet.xml配置正确,portlet的显示名称、实例化属性设置无误 - 查看Liferay控制台日志(
控制面板 → 配置 → 服务器管理 → 日志),排查部署过程中的报错 - 确认已在门户页面添加该portlet(
添加 → 小部件 → [应用分类]中查找留言板portlet)
内容的提问来源于stack exchange,提问作者Gonzalo Rabasa San Martín

