Liferay 7.4中通用实体类应置于api还是service模块?
问题解答
核心结论
ProductFilter 类应该放在 api模块。api模块的核心职责就是定义对外暴露的接口、请求/响应实体等共享组件,service模块作为api的实现方,天然应该依赖并能访问api模块中的类。
解决service模块部署时的包解析异常
你遇到的service模块无法解析api包的问题,大概率是api模块的打包配置或依赖引用方式有误,常见修复方式:
- 检查api模块打包类型:确保api模块被打包成可被依赖的jar包(比如Maven中设置
<packaging>jar</packaging>),避免打包时遗漏ProductFilter所在的包。 - 确认service模块的依赖配置:比如Maven中要正确引入api模块的依赖,且依赖范围为
compile(默认范围),保证编译和运行时都能加载到api模块的类。 - 检查类的可见性:确保
ProductFilter类的访问修饰符为public,且所在包未被Java模块系统限制对外访问。
为什么不能放在service模块或同时放在两个模块
- 放在service模块:api模块的接口需要用这个类定义请求参数,但api模块不应依赖service模块(会违背分层设计的依赖倒置原则),必然出现类找不到的问题。
- 同时放在两个模块:会导致类加载器加载同一全限定名的两个类实例,引发类转换异常、重复定义等冲突,绝对不可取。
内容的提问来源于stack exchange,提问作者Zirui Wang
相关产品推荐
相关产品推荐

