【问题标题】:How to use keytool API from org.codehaus.mojo?如何使用 org.codehaus.mojo 中的 keytool API?
【发布时间】:2023-08-04 22:14:02
【问题描述】:

我正在尝试使用来自 codehaus 的 mojo keytool API - http://mojo.codehaus.org/keytool/keytool-api/index.html

我已经建立了一个示例项目,只是尝试通过 API 执行changeAlias 请求。

这是我的示例代码:

KeyToolChangeAliasRequest request = new KeyToolChangeAliasRequest();
request.setVerbose(true);
request.setKeystore("keystore.ks");
request.setStorepass("keypass");
request.setAlias(oldAlias);
request.setKeypass("keypass");
request.setDestalias(newAlias);

DefaultKeyTool keyTool = new DefaultKeyTool();
JavaToolResult result = keyTool.execute(request);
result.getExitCode();
result.getExecutionException();

但是,当我运行程序时,我得到空指针异常 -

java.lang.NullPointerException
at org.codehaus.mojo.keytool.DefaultKeyTool.createCommandLine(DefaultKeyTool.java:53)
at org.codehaus.mojo.keytool.DefaultKeyTool.createCommandLine(DefaultKeyTool.java:33)

由于文档不佳,我无法找到正确使用 API 的方法。

【问题讨论】:

    标签: java keytool mojo


    【解决方案1】:

    您不能那样使用代码。必须在 plexus 容器环境中完成。

    您可以看到 builder 对象为空的代码在哪里中断 (http://mojo.codehaus.org/keytool/keytool-api/xref/org/codehaus/mojo/keytool/DefaultKeyTool.html#53),因为它应该通过 plexus 容器注入。

    如果您愿意,我们可以讨论如何改进代码,以便更容易地从 outisde 调用(请使用项目用户或开发邮件列表)。

    【讨论】:

    • 感谢托尼的回复。我的要求是从 java 执行 keytool 命令,我希望我可以利用 mojo API。是的,我们可以讨论改进代码以便从任何地方轻松调用,但现在我想我会坚持使用 java.security.* 类。