如何在Groovy中获取脚本名称

时间:2016-03-24 11:27:45

标签: groovy command-line

如何获取在Groovy中执行的脚本的名称?

它不是命令行参数,因此 args 数组没有任何帮助。

3 个答案:

答案 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'