Liferay部署自定义Service Builder时出现Gradle依赖解析错误
解决Liferay Service Builder Gradle部署的包依赖问题
问题重现
部署自定义模块时遇到以下错误:
MESSAGE Problem with deploying bundle: gogo: BundleException: Could not resolve module: com.liferay.trotspots.web [1569] Unresolved requirement: Import-Package: com.liferay.asset.constants; version="[1.1.0,2.0.0)"
但com.liferay.trotspot.web模块并未直接导入com.liferay.asset.constants,其build.gradle配置如下:
apply plugin: 'java' apply plugin: 'groovy' apply plugin: 'idea' apply plugin: 'eclipse' sourceCompatibility = 1.8 targetCompatibility = 1.8 //Need for Windows def defaultEncoding = 'UTF-8' dependencies { compile group: "biz.aQute.bnd", name: "biz.aQute.bndlib", version: "3.5.0" compile group: "org.apache.poi", name: "poi" compile group: "org.apache.poi", name: "poi-ooxml" compile group: "org.apache.poi", name: "poi-ooxml-schemas" compileOnly group: "com.liferay.portal", name: "release.portal.api" compileOnly group: "com.liferay", name: "com.liferay.application.list.api" compileOnly group: "com.liferay", name: "com.liferay.asset.api" compileOnly group: "com.liferay", name: "com.liferay.asset.display.page.api" compileOnly group: "com.liferay", name: "com.liferay.asset.display.page.item.selector.api" compileOnly group: "com.liferay", name: "com.liferay.asset.info.display.api" compileOnly group: "com.liferay", name: "com.liferay.asset.taglib" compileOnly group: "com.liferay", name: "com.liferay.comment.taglib" compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib" compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib.clay" compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib.soy" compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib.util" compileOnly group: "com.liferay", name: "com.liferay.info.api" compileOnly group: "com.liferay", name: "com.liferay.item.selector.api" compileOnly group: "com.liferay", name: "com.liferay.item.selector.criteria.api" compileOnly group: "com.liferay", name: "com.liferay.item.selector.taglib" compileOnly group: "com.liferay", name: "com.liferay.petra.reflect" compileOnly group: "com.liferay", name: "com.liferay.petra.string" compileOnly group: "com.liferay", name: "com.liferay.petra.function" compileOnly group: "com.liferay", name: "com.liferay.trash.api" compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel" compileOnly group: "com.liferay.portal", name: "com.liferay.util.taglib" compileOnly group: "javax.portlet", name: "portlet-api" compileOnly group: "javax.servlet.jsp", name: "jsp-api" compileOnly group: "jstl", name: "jstl" compileOnly group: "org.apache.felix", name: "org.apache.felix.http.servlet-api", version: "1.1.+" compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0" compileOnly group: 'org.slf4j', name: 'slf4j-api', version: '1.7.+' compileOnly project(":modules:trots:trots-api") compileOnly project(":modules:trots:trots-service") }
同时api和service模块也出现类似的缺失包错误,尝试指定com.liferay.asset.api版本无效。
解决办法
1. 排查依赖传递引入
未直接导入的包通常是依赖库间接引入的。比如com.liferay.asset.api或其他asset相关依赖可能依赖com.liferay.asset.constants,而你的Liferay环境中该包版本不匹配。
- 运行
gradle dependencies命令查看模块完整依赖树,定位哪个依赖间接引入了目标包,确认版本要求。
2. 统一Liferay依赖版本
确保所有Liferay相关依赖与服务器版本一致:
- 推荐使用
com.liferay.portal:release.portal.bom统一管理版本(Liferay 7.3+适用),替换零散的依赖版本配置。修改build.gradle:
将dependencies { implementation platform("com.liferay.portal:release.portal.bom:${liferayVersion}") // 后续Liferay依赖无需指定版本 compileOnly group: "com.liferay.portal", name: "release.portal.api" compileOnly group: "com.liferay", name: "com.liferay.application.list.api" // ... 其他Liferay依赖去掉版本号 }liferayVersion替换为你的Liferay服务器版本(如7.4.3.4)。
3. 检查Service Builder生成代码
Service Builder生成的api/service模块可能自动引入依赖,检查生成的bnd.bnd文件或自动代码,确认是否有意外导入的包。
- 清理旧生成代码,重新运行
serviceBuilder任务,确保生成配置与当前依赖一致。
4. 排除冲突依赖
若依赖树存在版本冲突,可通过exclude指令排除异常版本:
compileOnly group: "com.liferay", name: "com.liferay.asset.api", { exclude group: "com.liferay", module: "com.liferay.asset.constants" }
注意:此方法需谨慎,避免影响其他功能。
5. 检查服务器已安装模块
确认Liferay服务器中已安装com.liferay.asset.constants模块,且版本在[1.1.0,2.0.0)范围内:
- 启动服务器后,在Gogo shell运行
lb | grep asset,查看相关模块状态与版本。若缺失或版本不符,需安装对应版本模块。
6. 清理缓存重新构建
- 清理Gradle缓存:运行
gradle clean build --refresh-dependencies - 清理Liferay OSGi缓存:删除
[Liferay Home]/osgi/state目录内容,重启服务器后重新部署模块。
内容的提问来源于stack exchange,提问作者Lincolnmyth
相关产品推荐
相关产品推荐

