Вам не нужна определенная функция в groovyConsole или в оригинальном скрипте. Я считаю, что это хорошая практика программирования, но язык будет работать без него и добавит эти типы переменных в привязку скриптов.
Я не уверен в остальной части вашего кода (поскольку он не будет компилироваться, как вы его разместили). Но у вас либо есть действительно старая версия groovy, либо что-то еще не так с вашей конфигурацией или остальной частью вашего кода.
С добавлением заглушки для отсутствующего интерфейса IAction и класса PrintAction, я могу заставить его работать без изменений:
interface IAction {
def perform(obj)
}
class PrintAction implements IAction{
def perform(obj) {
println obj
}
}
class FileWalker {
private String dir
public static void onEachFile(String dir,IAction ia) {
new File(dir).eachFileRecurse {
ia.perform(it)
}
}
}
walker = new FileWalker()
walker.onEachFile(args[0],new PrintAction())
я создал фиктивный каталог с «Foo/бар» и «foo/baz».
Если я сохранить его в «walkFiles.groovy» и вызывать его из командной строки с
groovy walkFiles.groovy foo
Он печатает:
foo/bar
foo/baz
Это с последней версией заводной:
groovy -v
Groovy Version: 1.6-RC-3 JVM: 1.5.0_16