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

Liferay 7.4 GA107添加依赖时持续出现导入包未解析问题求助

解决Liferay 7.4 GA107中依赖导入的“未解析需求”错误

根本原因

你遇到的问题核心在于IronPDF的JAR不是OSGi兼容的Bundle。Liferay基于OSGi框架运行,模块间依赖需遵循OSGi规范:当模块用implementation声明依赖时,OSGi容器会尝试从已安装的Bundle中查找com.ironsoftware.ironpdf包,但IronPDF的普通JAR不包含OSGi所需的MANIFEST.MF头信息(如Bundle-SymbolicName、Export-Package),导致容器无法识别和解析该包。

解决方案

1. 将依赖嵌入到模块中

如果没有OSGi版本的IronPDF,最直接的方法是把依赖JAR嵌入到你的模块里,让模块自行携带该依赖。修改build.gradle中的依赖声明,用compileInclude替代implementation:

dependencies {
    compileOnly group: "com.liferay.portal", name: "release.portal.api"

    cssBuilder group: "com.liferay", name: "com.liferay.css.builder", version: "3.1.0"
    
    compileInclude group: 'com.ironsoftware', name: 'ironpdf', version: '2024.1.1'
}

compileInclude会将依赖JAR打包到模块的WEB-INF/lib目录下,同时Liferay的Gradle插件会自动调整模块的MANIFEST.MF,避免OSGi容器尝试从外部导入这些包。

2. 处理传递依赖(如果需要)

IronPDF可能包含其他非OSGi兼容的传递依赖,可按以下步骤处理:

  • 执行gradlew dependencies查看IronPDF的依赖树
  • 对所有需要的传递依赖,同样使用compileInclude声明,确保它们也被嵌入到模块中

3. 清理并重新构建部署

执行以下命令清理旧构建产物,重新构建并部署模块:

gradlew clean build deploy

确保Liferay服务器已重启或模块被正确更新。

4. 可选:将依赖转为OSGi Bundle

若不想嵌入依赖,可使用bnd工具将IronPDF的JAR转换为OSGi Bundle,添加必要的MANIFEST.MF头信息后,将转换后的Bundle部署到Liferay的OSGi容器(如放入deploy目录)。之后模块即可继续用implementation声明依赖,因为容器中已存在对应的Bundle。

内容的提问来源于stack exchange,提问作者Sumair Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:01:07