groovyのAntBuilderをJavaから使ってみた

groovyのAntBuilderをJavaから使ったらどうなるか試してみました。

groovyのこのコードを

def ant = new AntBuilder()
ant.echo "hello"
ant.copy( todir: "target" ){
    fileset( dir: "src" ) {
        include( name: "**/*.java" )
    }
}

Javaで書き直したらこうなりました。

import groovy.lang.Closure;
import groovy.util.AntBuilder;

import java.util.HashMap;

@SuppressWarnings("serial")
public class AntBuilderSample {

    public static void main(String[] args) {
        final AntBuilder ant = new AntBuilder();
        ant.invokeMethod("echo", "hello");

        ant.invokeMethod("copy", new Object[] { new HashMap<String, String>() {
            {
                this.put("todir", "target");
            }
        }, new Closure<Object>(null) {
            public Object call(Object... args) {
                ant.invokeMethod("fileset", new Object[] {
                        new HashMap<String, String>() {
                            {
                                this.put("dir", "src");
                            }
                        }, new Closure<Object>(null) {
                            public Object call(Object... args) {
                                ant.invokeMethod("include",
                                        new HashMap<String, String>() {
                                            {
                                                this.put("name", "**/*.java");
                                            }
                                        });
                                return null;
                            }
                        } });
                return null;
            }
        } });
    }
}

groovyが文法上、もっとも力を入れている部分を無効化しているのでこうなりますね。
さすがにこれでは使うのはつらいな。
せめてMapリテラルがあればな。