首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Guice和lombok生成带picocli的文档

使用Guice和lombok生成带picocli的文档
EN

Stack Overflow用户
提问于 2020-11-24 14:49:02
回答 1查看 241关注 0票数 1

我使用picocli(4.5.2)、lombok和guice创建了一个cli。我的所有命令类都有私有的最终字段(服务),它们是用lombok和guice初始化的。例如:

代码语言:javascript
复制
@Command(name = "example", helpCommand = true,
    description = "example controller")
@RequiredArgsConstructor(onConstructor = @__({@Inject}))
public class ExampleCommand implements Callable<Integer> {
    private final MyFacade myFacade;

    @Setter
    @ParentCommand
    private ParentCommandHere parentCommandHere;
    
        @Override
    public Integer call() {
        // do something
        return 0;
    }
}

此外,我还有picocli文档中建议的GuiceFactory。

当我尝试使用ManPageGenerator来生成文档时(使用下面的文档 )

我看到了这样的错误:

代码语言:javascript
复制
picocli.CommandLine$InitializationException: Cannot instantiate path.to.my.command.ExampleCommand : the class has no constructor
   at picocli.CommandLine$DefaultFactory.create(CommandLine.java:5199)
    at picocli.CommandLine$Model$CommandUserObject.getInstance(CommandLine.java:11160)
    at picocli.CommandLine$Model$CommandSpec.userObject(CommandLine.java:5928)
    at picocli.codegen.docgen.manpage.ManPageGenerator.traceAllSpecs(ManPageGenerator.java:312)
    at picocli.codegen.docgen.manpage.ManPageGenerator.generateManPage(ManPageGenerator.java:285)
    at picocli.codegen.docgen.manpage.ManPageGenerator.generateManPage(ManPageGenerator.java:300)
    at picocli.codegen.docgen.manpage.ManPageGenerator.generateManPage(ManPageGenerator.java:300)
    at picocli.codegen.docgen.manpage.ManPageGenerator$App.call(ManPageGenerator.java:215)
    at picocli.codegen.docgen.manpage.ManPageGenerator$App.call(ManPageGenerator.java:166)
    at picocli.CommandLine.executeUserObject(CommandLine.java:1933)
    at picocli.CommandLine.access$1200(CommandLine.java:145)
    at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2332)
    at picocli.CommandLine$RunLast.handle(CommandLine.java:2326)
    at picocli.CommandLine$RunLast.handle(CommandLine.java:2291)
    at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2159)
    at picocli.CommandLine.execute(CommandLine.java:2058)
    at picocli.codegen.docgen.manpage.ManPageGenerator.main(ManPageGenerator.java:239)
Caused by: java.lang.NoSuchMethodException: path.to.my.command.ExampleCommand.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.getDeclaredConstructor(Class.java:2178)
    at picocli.CommandLine$DefaultFactory.create(CommandLine.java:5174)
    at picocli.CommandLine$DefaultFactory.create(CommandLine.java:5197)

有办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 21:54:42

要让Guice依赖注入与picocli一起工作,您的应用程序可能有一个定制工厂。这个工厂在运行应用程序时是必需的,但在使用ManPageGenerator生成文档时也是必要的。

ManPageGenerator应用程序有一个选项,您可以在其中指定这个自定义工厂的类名。在调用javaExec任务时,将其添加到构建脚本中的参数中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64988920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档