0

我正在寻找Spring-Shell用于技术支持团队的诊断实用程序。这个想法是将可执行文件jar放到系统上,运行应用程序并让它通过一堆诊断程序运行。

我想禁用/删除一些从org.springframework.shell.commands包中自动加载的命令,我不知道该怎么做。可能吗?

如果做不到这一点,我只想自定义帮助命令,以便我可以输出自己的帮助。我什至无法让它工作,尽管我能够弄清楚如何从用户点击时显示的命令列表中删除它们TAB

@CliAvailabilityIndicator({"!", "//", "script","system"})
public boolean isAvailable()
{
    return false;
}

有任何想法吗?

4

2 回答 2

4

事实证明,根据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 参数......但这超出了这个问题的范围。

于 2015-04-29T18:08:07.553 回答
0

如果要排除某些内置命令。将 --disableInternalCommands 参数传递给 main 函数(参见上一篇文章)并将 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>
于 2016-10-19T11:09:20.417 回答