Вам не нужно def в groovyConsole или в скрипте groovy. Я считаю хорошей практикой иметь такую возможность, но язык будет работать без нее и добавлять переменные такого типа в привязку скриптов.
Я не уверен насчет остальной части вашего кода (поскольку он не будет компилироваться, когда вы его разместили). Но у вас либо действительно старая версия 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 / bar" и "foo / baz".
Если я сохраню его в "walkFiles.groovy" и вызову его из командной строки с
groovy walkFiles.groovy foo
Он печатает:
foo/bar
foo/baz
Это последняя версия groovy:
groovy -v
Groovy Version: 1.6-RC-3 JVM: 1.5.0_16