添加至Service Builder类的方法无法在编译后jar中识别
检查Service Builder生成的接口是否同步更新
确认MyRecordLocalService接口(位于service模块的com/xxx/service/路径下)包含你新增的方法。Service Builder会自动根据LocalServiceImpl的公共方法生成接口,若接口缺失目标方法,重新执行buildService(Gradle)或liferay:build-service(Maven)命令,确保生成过程无报错。验证模块编译配置的源码目录
查看build.gradle或pom.xml的编译配置:- Gradle需确保
sourceSets.main.java.srcDirs包含src/main/java和build/service-builder/source/java; - Maven要在
build节点的sourceDirectory和generatedSources中配置正确的Service Builder生成源码路径。
路径配置错误会导致编译时跳过生成的类,Jar包自然不会包含新增方法。
- Gradle需确保
清理缓存后重新构建
执行全量清理+构建命令:Gradle用clean buildService build,Maven用clean liferay:build-service package,彻底删除旧的build目录和Jar包。旧编译缓存常导致新增方法无法被打包,强制清理后重新构建可解决这类问题。检查LocalServiceImpl方法的修饰符
确保MyRecordLocalServiceImpl中新增的方法是public修饰符。Service Builder仅会同步公共方法到生成的接口和Util类中,私有或包级权限的方法不会被处理。确认service.xml配置无异常
检查service.xml的<entity>标签配置,确保新增表与现有实体无命名冲突,同时<service-builder>的package-path等核心配置正确。若service.xml存在隐性语法错误,可能导致Service Builder生成不完整的接口类,表面生成无异常但实际方法未同步。检查Jar包打包与模块依赖
确认服务模块的类型:若在-service模块新增方法,需保证依赖该模块的项目引用的是最新构建的Jar包,而非旧版本。同时检查bnd.bnd的Export-Package配置,确保导出了包含新增方法的服务接口包,否则其他模块无法访问新增方法。
内容的提问来源于stack exchange,提问作者Pete Helgren

