如何获取在Groovy中执行的脚本的名称?
它不是命令行参数,因此 args 数组没有任何帮助。
答案 0 :(得分:10)
您可以按如下方式获取当前脚本名称。
def scriptName = this.class.getName()
println "Script FQCN : " + scriptName
它将打印出脚本名称(它只是一个类),其包名为 FQCN (完全限定类名)。
如果您只想要脚本名称而不是包,则可以使用
println "Script Simple Name : " + this.class.getSimpleName()
答案 1 :(得分:4)
我在支持类中为很多脚本执行此操作,因此itsraghz的答案对我不起作用。
如果您使用脚本调用的支持类中的this.class或getClass(),您将获得支持类的名称,而不是脚本的名称。每次使用时都要获取脚本的名称:
// Get the executed script as a (java) File
File scriptFile = new File(getClass().protectionDomain.codeSource.location.path)
// This holds the file name like "myscript.groovy"
def scriptName = scriptFile.getName()
// strip the extension to get "myscript"
def withoutExt = scriptName.take(scriptName.lastIndexOf('.'))
答案 2 :(得分:1)
如果在脚本本身中应用,上述解决方案是完美的。有时需要从脚本调用的其他文件或类中知道脚本名称。
例如脚本 script1.groovy
调用 SomeClass
。这个 SomeClass
也可以找到脚本的名称。一线解决方案是
StackTraceUtils.deepSanitize(new Exception()).getStackTrace().last().getFileName()
看下面的例子:
script1.groovy:
import SomeClass
def someInst = new SomeClass()
SomeClass.groovy:
import org.codehaus.groovy.runtime.StackTraceUtils
class SomeClass {
String scriptName = StackTraceUtils.deepSanitize(new Exception()).getStackTrace().last().getFileName().replaceAll(/\.groovy/, '')
println "My calling script is '$scriptName'"
}
output:
My calling script is 'script1'