如何在 Groovy 脚本中包含一些类?
(这个问题与REST无关,但我使用REST将问题放在正确的上下文中)
背景: 我正在 groovy 中开发 CLI,以从我们正在运行的服务获取状态信息。状态信息作为 REST 接口(interface)公开。
根据我在 CLI 上给出的参数,在 REST 接口(interface)上调用不同的路径。我还将实际的 REST 通信放入类层次结构中,以便能够重用代码,这就是我遇到问题的地方。如何以简单的方式将类层次结构包含在我的 groovy 脚本中?
Groovy CLI 脚本 RestCli.groovy
import restcli.RestA
import restcli.RestB
if(args[0] == "A") {
new RestA().restCall()
}
else if(args[0] == "B") {
new RestB().restCall()
}
层次结构的 super 类restcli/RestSuper.groovy
package restcli
abstract class RestSuper {
protected def restCall(String path) {
println 'Calling: ' +path
}
abstract def restCall()
}
两个类来实现不同的调用。 restcli/RestA.groovy
package restcli
class RestA extends RestSuper {
def restCall() {
restCall("/rest/AA")
}
}
和restcli/RestB.groovy
package restcli
class RestB extends RestSuper {
def restCall() {
restCall("/rest/BB")
}
}
我想要得到的结果很简单:
> groovy RestCli.groovy B
Calling: /rest/BB
关于如何做到这一点有什么想法吗?
我实际上想避免创建 jar 文件,然后使用 -classpath
选项,因为我还使用 @Grab
来获取 http-builder,如果我使用 -classpath
然后遇到这样的问题: java.lang.NoClassDefFoundError: groovyx.net.http.HTTPBuilder
最佳答案
您可以将多个类放入一个 groovy 脚本中(不确定包如何/是否以这种方式工作),或者只是将包结构创建为与主脚本相同的文件夹中的目录结构。
在您的示例中,可能如下所示:
/
+ RestCli.groovy
+ restcli/
+--+ RestSuper.groovy
+--+ RestA.groovy
+--+ RestB.groovy
然后您可以像这样调用您的脚本:
> groovy RestCli.groovy B
关于class - 在 Groovy 脚本中包含类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16036698/