我正在尝试在spring-boot应用程序中向spring-actuator的ssh远程shell添加一个java命令。 spring-boot版本是1.2.3.RELEASE。
我的示例命令名为'kafka',我尝试将它放在/ crash /命令以及/ commands中的类路径中。它永远不会被发现 - 它不会显示在帮助中或实际工作中。
有没有办法让远程shell告诉我它启动时扫描/查找的是什么?
我尝试过的事情包括明确覆盖shell.commandPathPatterns,虽然默认情况下应该覆盖它。
我的命令 - 用于测试 - 非常简单:
package commands;
@Usage("Kafka utility commands")
public class kafka extends BaseCommand {
@Command
public Object main(InvocationContext<ObjectName> context) {
return "it's all good";
}
}
答案 0 :(得分:4)
经过一个小时的调试后,我发现CRaSH远程shell在包.groovy
和.java
中查找扩展名为commands
或crash.commands
的文件}。找到的文件被编译为字节码,编译器错误被忽略。
我认为你使用像Maven这样的东西。当您将命令放入src / main / java时,Maven会将其编译为.class文件,CRaSH将无法找到它。当您将命令放入src / main / resources时,Maven将不编译它并将其保存为.java文件。
解决方案(这对我来说很奇怪)是将您的java命令文件放入src / main / resources(包commands
或crash.commands
),这样您就拥有.java
源代码目标目录或JAR中的文件。
我使用spring-boot 1.2.1.RELEASE(crash.shell:1.3.0)对它进行了测试,它与1.2.3.RELEASE(crash.shell:1.3.1)的差别不大。