我有一个Spring Boot包,它由一堆工具类组成,每个工具类都有一个main方法。有没有办法自动为每个工具类获取一个可运行的脚本?
我到目前为止最接近的是使用Spring Boot PropertiesLauncher
启动器,以便我可以写:
LOADER_MAIN=com.foo.bar.ToolClass java -jar foo.jar ARGUMENT...
但如果我只能写ToolClass ARGUMENT...
或foo.jar ToolClass ARGUMENT...
,那就更好了。
使用反射查找类然后调用其主方法的短模块很容易实现后者,但这不是类型安全或自动的。
我还注意到使用Spring Boot CLI我可以编写Groovy脚本来实现这个结果,但是我仍然需要用spring run script
来调用它们。
另一种表达这个问题的方法可能是“如何让JAR自动提供像git这样的子命令?”。我看到几个命令行参数解析框架提供了这些类型的命令,但我不想手动构建它,我希望它被自动发现(并且子命令的参数解析留给子命令)。
有一个Node.JS npm模块helmsman,它在JavaScript中具有相同的功能:它将脚本目录转换为子命令。我认为Java等价物应该花费更少的精力来使用,因为它可以使用反射来查找所有主要方法,然后简单地将命令行参数分派给给定的类。