You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:45:44