получить путь к исходному файлу groovy во время выполнения

Учитывая следующую структуру каталогов:

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

... как мне программно получить путь к родительскому каталогу myScript.grooy прямо в самом скрипте?

В конечном итоге я пытаюсь прочитать несколько файлов из того же каталога, в котором находится скрипт.

EDIT: попытка запустить его в Windows 7, Groovy 2.0.1, консоли Groovy


person vector    schedule 14.08.2012    source источник
comment
возможный дубликат Как вы получаете путь запуска скрипта в groovy?   -  person tim_yates    schedule 14.08.2012


Ответы (1)


Что ж, решение находится в классе File Java:

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)
person Will    schedule 14.08.2012
comment
... хм, File(.).absolutePath дает мне C:\Users\userNameHere\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories\Groovy\. и обходной путь тоже не работает, облом :-( - person vector; 14.08.2012
comment
Разве вы не запускаете Groovy через cmd? - person Will; 14.08.2012
comment
крутая консоль, это что-то изменит? - person vector; 14.08.2012
comment
Я запускаю его через свою оболочку, а не через groovyconsole, возможно, в этом проблема: вместо скрипта он получает путь к groovyconsole. - person Will; 15.08.2012