运行时获取Groovy源代码文件路径

5

假设有如下目录结构:

/home/some/random/foler/myScript.grooy

我该如何在脚本本身中编程获取myScript.grooy父目录的路径?

最终,我想从脚本所在的同一目录中读取多个文件。

编辑:我试图在Windows 7、Groovy 2.0.1和Groovy控制台上运行它。


2
可能是如何在Groovy中获取正在运行的脚本路径?的重复问题。 - tim_yates
这个回答解决了你的问题吗?如何在Groovy中获取正在运行的脚本路径? - M. Justin
1个回答

19

好的,解决方案在Java的File类中:

println new File(".").absolutePath

如果你想获取同一目录下的所有Groovy脚本,也许你可以使用Groovy JDK中的其他工具,比如eachFile

def files = []
new File(".").eachFile { 
    if (it.name.endsWith(".groovy") ) files << it 
}
println files

如果你想获取正在运行的脚本名称,那么你会遇到问题(https://issues.apache.org/jira/browse/GROOVY-1642)。

根据这个JIRA的说法,这是目前的解决方法(并不总是有效):

URL scriptUrl = getClass().classLoader.resourceLoader
    .loadGroovySource(getClass().name)

哎呀,File(“。”)。absolutePath 给了我 “C:\Users\userNameHere\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories\Groovy.”,而解决方法也不起作用,真糟糕 :-( - vector
你不是通过命令行运行Groovy吗? - Will
Groovy控制台,这会有所不同吗? - vector
我是通过shell运行的,而不是groovyconsole,也许这就是问题所在:它最终获取到的是groovyconsole的路径,而不是脚本的路径。 - Will

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接