从 Spring-Shell 中删除命令

Remove commands from Spring-Shell

我希望使用 Spring-Shell 为技术支持团队构建诊断实用程序。这个想法是将可执行文件 jar 放在系统上,运行 应用程序并通过一系列诊断让它 运行。

我想要 disable/remove 一些从 org.springframework.shell.commands 包中自动加载的命令,但我不太清楚该怎么做。可能吗?

否则,我只想自定义帮助命令,以便输出我自己的帮助。我什至无法让它工作,尽管我能够弄清楚如何从用户点击 TAB.

时显示的命令列表中删除它们
@CliAvailabilityIndicator({"!", "//", "script","system"})
public boolean isAvailable()
{
    return false;
}

有什么想法吗?

事实证明,根据 http://docs.spring.io/spring-shell/docs/current/reference/htmlsingle/#d4e173,spring shell 可以使用命令行参数调用应用程序以禁用内部命令。所以我所做的是在我的应用程序的主要方法中我自己添加了参数。

public static void main(String[] args) throws IOException
{
    ArrayList<String> argsList = new ArrayList<String>(Arrays.asList(args));
    argsList.add("--disableInternalCommands");
    String[] argsArray = new String[argsList.size()];
    argsArray = argsList.toArray(argsArray);
    Bootstrap.main(argsArray);
}

可能有一种更简洁的方法可以将参数添加到 args 参数中......但这超出了这个问题的范围。

如果你想排除一些内置命令。将 --disableInternalCommands 参数传递给主函数(参见前面的 post)并将 org.springframework.shell.commands 包添加到 spring 组件扫描路径并使用 exculde 过滤器删除内置命令.

spring-shell-plugin.xml

<beans>
    <context:component-scan base-package="com.foo.bar.commands, org.springframework.shell.commands" >
        <context:exclude-filter type="regex" expression=".*(ScriptCommands|DateCommands|SystemPropertyCommands|VersionCommands)" />
    </context:component-scan>
</beans>