Liferay 7.1 GA3中shopping-web无法访问shopping-api/service类问题
问题分析与解决方法
你遇到的javax.servlet.ServletException: java.lang.NoClassDefFoundError: com/project/demo/model/Product错误,核心原因是shopping-web模块的bnd配置主动排除了需要导入的核心包,导致web模块无法加载shopping-api中的模型与服务类。
关键错误点
查看你提供的shopping-web的bnd.bnd文件,Import-Package和Import-Service中都用!前缀排除了com.project.demo.model、com.project.demo.service等必需包,相当于主动拒绝加载这些类,自然会出现找不到类的错误。
具体修复步骤
1. 修正shopping-web的bnd.bnd配置
删除对核心包的排除规则,让模块自动导入所需依赖:
Bundle-Name: shopping-web Bundle-SymbolicName: com.web.project.demo Bundle-Version: 1.0.0 Export-Package: com.web.project.demo.constants # 自动导入所有依赖包,无需手动排除 Import-Package: * # 服务导入只需保留默认规则,无需排除核心服务 Import-Service: *
2. 确认模块依赖配置
检查shopping-web的构建文件,确保已添加对shopping-api的依赖:
- 若使用Gradle,在
build.gradle中添加:
dependencies { compileOnly project(":shopping-api") // 其他原有依赖... }
- 若使用Maven,在
pom.xml中添加:
<dependency> <groupId>com.project.demo</groupId> <artifactId>shopping-api</artifactId> <version>1.0.0</version> <scope>provided</scope> </dependency>
3. 清理并重新部署
- 执行构建命令清理缓存:Gradle用
gradlew clean build,Maven用mvn clean install - 依次重新部署shopping-api、shopping-service、shopping-web模块到Liferay
- 必要时重启Liferay服务器,确保模块加载状态正常
额外验证
- 确认shopping-api的bnd配置已正确导出
com.project.demo.model、com.project.demo.service等包(你的现有配置没问题,无需修改) - 在Liferay的Gogo Shell中执行
lb命令,检查三个模块的状态是否为Active
内容的提问来源于stack exchange,提问作者Vishwanath
相关产品推荐
相关产品推荐

