Liferay7.2部署Hook时报Unresolved requirement: com.google.common.collect错误如何解决
根因分析
这个OSGi启动报错是因为你的Bundle声明导入了com.google.common.collect包,但运行时Liferay容器没有匹配到可用的导出包,核心问题有两个:
- 你使用的
com.google.collections是已废弃的旧项目,该项目早已合并到Guava中,Liferay7.2内置的Guava包不会导出旧的google-collections相关路径 - BND插件自动生成的OSGi导入声明版本约束和Liferay内置Guava的版本不匹配
解决步骤
1. 修正POM依赖
删除原有com.google.collections依赖,替换为Liferay7.2内置版本的Guava依赖,scope设为provided直接复用容器自带的包,无需自行打包:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>25.1-jre</version> <scope>provided</scope> </dependency>
2. 配置BND导入规则
在项目src/main/resources目录下新建/修改bnd.bnd文件,添加以下配置,放开Guava包的导入版本约束:
Import-Package: com.google.common.collect;version="*",\ *
配置说明:
com.google.common.collect;version="*"表示匹配任意版本的com.google.common.collect导入- 末尾的
*表示其余包保持BND默认的自动导入规则
3. 重新构建部署
执行mvn clean install命令构建新的Bundle包,放到Liferay的deploy目录下启动即可。
备选方案(需自定义Guava版本时使用)
如果你必须使用和Liferay内置版本不同的Guava,可将Guava内嵌到自己的Bundle中:
- 将上述Guava依赖的scope改为
compile - 在
bnd.bnd中添加内嵌配置:
Embed-Dependency: guava;inline=true
内容的提问来源于stack exchange,提问作者sheldon
相关产品推荐
相关产品推荐

