自从我修改现有的服务构建器以来已经有一段时间了,但我需要添加一个新表并创建一个使用 JSON 对象处理该表更新的方法。将表架构添加到 service.xml 很容易,并且生成的类似乎都很好。我将所需的方法添加到 MyRecordLocalServiceImpl 类并重新生成服务生成器。 它使用我添加的方法创建了一个 MyRecordLocalServiceUtil 类。 该方法也存在于 MyRecordServiceUtil 中。 一切都很好。 我构建了服务并部署了 jars。我可以看到构建路径中列出的罐子。 我什至可以使用对在添加和重建服务构建器工件之前存在的服务构建器类的引用。 当我在代码中引用 MyRecordServiceUtil 类并使用上下文提示查找该方法时,该类中列出的唯一方法是 getOSGiServiiceIdentifier()、getService() 方法和类引用本身。
我查看了 jar 本身中的类文件,如果我反编译它们,它们没有我添加的新方法。 所以,有什么不对劲。 我应该寻找/更改什么,以便将具有服务构建器工件的 .java 文件正确编译到 jar 文件中? 很奇怪,.java 代码没问题,但编译的类似乎忽略了我的更改......
假设您使用 OSGi 部署:ServiceBuilder 组件分为两个模块:
yourservicename-api
和 yourservicename-service
。服务实现(您添加方法的位置,例如 MyRecordLocalServiceImpl
)位于 -service
模块中,ServiceBuilder 生成正确的 -api
模块(具有静态类 MyRecordLocalServiceUtil
和接口 MyRecordLocalService
)它。为此,您必须再次运行 ServiceBuilder。
您需要编译和部署两者,才能使用它们。
完成此操作后,您通常还必须自己处理更改的数据库表(通过编写添加附加列的升级例程) - 除非您已经激活了开发设置(希望您还没有这样做)在您的生产服务器上)
我假设您的工具链中的某个位置挂有旧的 -api 模块,或者您没有再次运行 ServiceBuilder。