如何使用@SourceURI批注在Groovy 2.3中检索脚本文件的完整路径?

如何使用@SourceURI批注在Groovy 2.3中检索脚本文件的完整路径?,第1张

概述我需要在运行时检索Groovy 2.3中脚本文件的完整路径. 实际上我遇到的问题与这里描述的问题相同: get path to groovy source file at runtime. 我的脚本可以从GroovyShell执行或不执行. 我的脚本位于: C:\users\myname\documents\scripts\myscript.groovy =>我想在运行时检索此路径. 如果我使用被 我需要在运行时检索Groovy 2.3中脚本文件的完整路径.
实际上我遇到的问题与这里描述的问题相同: get path to groovy source file at runtime.

我的脚本可以从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-starter.conf中使用load指令在groovy启动时加载它时才有效.否则返回null.我可以使用这种方法,但它并不令人满意,因为它就像传递参数一样,这里的目标是用户能够从任何地方执行脚本而无需修改或配置.

我也对这个专注于这个问题的JIRA感兴趣:
JIRA-1642

解决方案似乎使用为此目的创建的@SourceURI注释.问题是我无法使其发挥作用.我尝试执行以下所示的代码用法:SourceURI

@groovy.transform.sourceURI def sourceURIassert sourceURI instanceof java.net.URIpath = 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注释来检索脚本文件的路径?

解决方法 我一直在寻找与您相同的脚本路径信息.我注意到通过shell运行以下代码时:

@groovy.transform.sourceURI def sourceURIassert sourceURI instanceof java.net.URIsourceURI.propertIEs.each { i ->     println i}

我得到以下有用的结果(注意路径中的值):

rawAuthority=nullopaque=falsescheme=filerawquery=nullport=-1rawUserInfo=nullpath=/home/ttresans/GroovyScripts/TestSourceURI.groovyclass=class java.net.URIabsolute=trueschemeSpecificPart=/home/ttresans/GroovyScripts/TestSourceURI.groovyrawPath=/home/ttresans/GroovyScripts/TestSourceURI.groovyquery=nullfragment=nullhost=nullauthority=nullrawFragment=nulluserInfo=nullrawSchemeSpecificPart=/home/ttresans/GroovyScripts/TestSourceURI.groovy

但是,如果我将相同的东西粘贴到GroovyConsole中,我会得到以下内容:

rawAuthority=nullopaque=truescheme=datarawquery=nullport=-1rawUserInfo=nullpath=nullclass=class java.net.URIabsolute=trueschemeSpecificPart=,@groovy.transform.sourceURI def sourceURIassert sourceURI instanceof java.net.URIsourceURI.propertIEs.each { i ->     println i}rawPath=nullquery=nullfragment=nullhost=nullauthority=nullrawFragment=nulluserInfo=nullrawSchemeSpecificPart=,@groovy.transform.sourceURI%20def%20sourceURI%0Aassert%20sourceURI%20instanceof%20java.net.URI%0AsourceURI.propertIEs.each%20%7B%20i%20-%3E%20%0A%20%20%20%20println%20i%0A%7D%0A

这是在Ubuntu上的Groovy 2.3.9上.

所以看起来GroovyConsole的启动可能是一个问题,但注释确实产生了所需的路径.

总结

以上是内存溢出为你收集整理的如何使用@SourceURI批注在Groovy 2.3中检索脚本文件的完整路径?全部内容,希望文章能够帮你解决如何使用@SourceURI批注在Groovy 2.3中检索脚本文件的完整路径?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1220430.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存