我需要在运行时检索 Groovy 2.3 中脚本文件的完整路径。实际上,我遇到的问题与此处描述的问题相同:在运行时获取 groovy 源文件的路径。
我的脚本是否可以从 GroovyShell 执行。
我的脚本位于:
C:\users\myname\documents\scripts\myscript.groovy
=> 我只想在运行时检索此路径。
如果我使用被接受的解决方案:
println new File(".").absolutePath
我得到的实际上是:
C:\groovy-2.3.7\.
这是 groovy 主文件夹。这是不正确的。另一个建议的答案即:
URL scriptUrl = getClass().classLoader.resourceLoader.loadGroovySource(getClass().name)
仅当我的脚本位于类路径中,或者在 groovy 启动时使用 groovy-starter.conf 中的加载指令加载它时才有效。否则返回null。我可以使用这种方法,但它并不令人满意,因为它就像传递参数一样,这里的目标是用户能够从任何地方执行脚本而无需修改或配置。
我也红了这个专注于这个问题的JIRA: JIRA-1642
解决方案似乎使用了为此目的创建的@SourceURI 注释。问题是我无法让它工作。我尝试执行如下所示的代码用法:SourceURI
@groovy.transform.SourceURI def sourceURI
assert sourceURI instanceof java.net.URI
path = sourceURI.toString()
println "path = $path"
我得到的是(groovy 2.3.7)不是路径而是源代码:
path = data:,@groovy.transform.SourceURI%20def%20sourceURI%0A%0A%20assert%20sourceURI%20instanceof%20java.net.URI%0Apath%20=%20sourceURI.toString()%0Aprintln%20%22path%20=%20$path%22
如何使用@SourceURI 注释来检索脚本文件的路径?