Jakarta ee 未使用Liferay 7 Service Builder生成Finder Util类

Jakarta ee 未使用Liferay 7 Service Builder生成Finder Util类,jakarta-ee,liferay,liferay-7,liferay-service-builder,Jakarta Ee,Liferay,Liferay 7,Liferay Service Builder,虽然我对Liferay 6.2中的服务生成器没有问题,但在构建服务以生成第一个Finder Util类时,我在Liferay 7中遇到了阻塞问题。 当我发现,我甚至决定从头开始一个项目,问题仍然存在。 即使有官方的医生,也没什么用 有人有办法帮我吗 以下是我上次在Eclipse Mars中测试的完整描述: 创建新的Liferay工作区 创建新的Liferay项目模块服务生成器 在service.xml中创建一个foo对象 构建服务 (类生成良好) 在persistence.impl包中手动创建F

虽然我对Liferay 6.2中的服务生成器没有问题,但在构建服务以生成第一个Finder Util类时,我在Liferay 7中遇到了阻塞问题。 当我发现,我甚至决定从头开始一个项目,问题仍然存在。 即使有官方的医生,也没什么用

有人有办法帮我吗

以下是我上次在Eclipse Mars中测试的完整描述:

  • 创建新的Liferay工作区
  • 创建新的Liferay项目模块服务生成器
  • 在service.xml中创建一个foo对象
  • 构建服务 (类生成良好)
  • 在persistence.impl包中手动创建FooFinderImpl类
  • 构建服务
    FooFinder接口生成良好,但没有生成FooFinderUtil类。
  • 在FooFinderImpl类中添加一些方法
  • 构建服务
  • 没什么新鲜事
  • 谢谢你的帮助


    Vincent

    构建服务时,build.gradle中有一些属性,因此如果要生成Util类,必须将osgiModule设置为false

    buildService {
        apiDir = "../foo-api/src/main/java"
        osgiModule = false
        propsUtil = "com.liferay.docs.foo.service.util.PropsUtil"
    }
    
    否则,如果您想使用osgi,您可以通过这种方式检索finder

    @Reference
    private volatile FooFinder fooFinder;
    

    有关更多信息,请参阅liferay文档

    github上的示例

    注意:在Liferay Portal的早期版本中,可以通过-FinderUtil实用程序类访问finder方法。Finder方法现在被注入到应用程序的本地服务中,不再需要调用Finder实用程序


    您现在应该可以直接调用服务层中的finder方法:
    fooFinder.findBy…

    非常感谢您的回答!你的第一个建议解决了问题,但我会保留OSGI。所以,我刚刚尝试了第二个,但是我的finder为null,我必须在其他地方声明它吗?你可以尝试我在edit中添加的其他代码吗。引用获取接口的服务实现,因此您只需部署osgi捆绑包foo服务和foo api。尝试在使用finder
    导入包时导入包:com.liferay.foo.service
    。好的,我的finder在第三个解决方案中仍然为空,但我将阅读您提到的liferay文档。我告诉你一个新消息。如果我在我的傻瓜服务impl中使用带有“@Reference”注释的FooFinder,我可以通过傻瓜服务util调用傻瓜服务impl类方法吗?或者我需要在我的portlet模块中声明带有“@servicerence”注释的傻瓜服务吗?很好!谢谢你花了这么多时间!祝您有个美好的一天!
    @Reference(unbind = "-")
    protected void setFooFinder(
            FooFinder fooFinder) {
    
        _fooFinder = fooFinder;
    }
    
    private FooFinder _fooFinder;