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

添加commons-lang3依赖后Liferay Portlet部署失败问题排查

Liferay Gradle模块依赖问题排查与解决

问题核心原因

  • 依赖声明不匹配OSGi模块规则:你用的普通compile依赖仅在本地编译阶段生效,不会处理OSGi容器需要的依赖打包或导入声明。部署到Liferay的OSGi容器后,模块既没有携带commons-lang3的JAR,也没有向容器声明需要导入该包,导致容器无法解析依赖。
  • OSGi元数据缺失:Liferay的OSGi模块需要通过Import-Package元数据声明依赖的外部包,普通compile不会自动生成这个元数据,容器无法识别模块对commons-lang3的依赖需求。

针对性解决方法

方法1:嵌入依赖到模块JAR

如果Liferay系统中没有预装commons-lang3的OSGi bundle,直接把依赖打包进模块JAR:

dependencies {
    // 使用Liferay Gradle插件提供的embed配置,自动处理依赖嵌入
    embed group: "org.apache.commons", name: "commons-lang3", version: "3.4"
}

或者手动配置打包逻辑(适合自定义需求):

dependencies {
    compileOnly group: "org.apache.commons", name: "commons-lang3", version: "3.4"
}

jar {
    // 将commons-lang3的内容打包进模块JAR
    from configurations.compileClasspath.filter { it.name.contains("commons-lang3") }.collect { zipTree(it) }
}

方法2:声明OSGi包导入

如果Liferay系统已经部署了commons-lang3的OSGi bundle(可通过OSGi控制台的“Bundles”页面确认),只需声明导入该包即可:

dependencies {
    compileOnly group: "org.apache.commons", name: "commons-lang3", version: "3.4"
}

// 配置生成正确的OSGi导入元数据
osgi {
    importPackage = [
        "org.apache.commons.lang3.*",
        "*" // 保留模块其他必要的默认导入
    ]
}

关键注意事项

  • 避免在Liferay OSGi模块中使用普通compile依赖,改用Liferay Gradle插件提供的embed、compileOnly等专用配置,这些配置会自动处理OSGi元数据生成。
  • 优先使用导入方式(方法2),减少模块体积;只有当系统没有对应bundle时,再选择嵌入方式(方法1)。

内容的提问来源于stack exchange,提问作者KRISTIJAN TOMASINI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:06:24