К моему удивлению, ни в 700-страничном фолианте "Groovy in Action", ни в достаточно неплохой документации на сайте языка не приводится пример создания с помощью AntBuilder полнофункционального проекта (т.е. не просто последовательности выполняемых задач (tasks), а совокупности взаимозависимых целей (target). Анализ имеющихся в сети исходников и сниппетов не дал ничего интереснее, чем псевдо-цели с использованием замыканий (closures). Например, такой код принимает имена задач из командной строки (почти как настоящий ant):
#!/usr/bin/env groovy
DEFAULT = 'jar'
DEST = 'target'
JAR = "$DEST/myapp.jar"
SRC = 'src'
DEST = 'target'
JAR = "$DEST/myapp.jar"
SRC = 'src'
ant = new groovy.util.AntBuilder()
ant.taskdef(name: 'groovyc', classname: 'org.codehaus.groovy.ant.Groovyc')
compile = {
println '\ncompile:'
ant.mkdir(dir: DEST)
ant.groovyc(destdir: DEST, srcdir: SRC, includes: '*.groovy')
}
ant.taskdef(name: 'groovyc', classname: 'org.codehaus.groovy.ant.Groovyc')
compile = {
println '\ncompile:'
ant.mkdir(dir: DEST)
ant.groovyc(destdir: DEST, srcdir: SRC, includes: '*.groovy')
}
jar = {
compile()
println '\njar:'
ant.jar(destfile: JAR, basedir: DEST, includes: '*.class')
}
if (args) for (t in args) this[t]() else this[DEFAULT]()
compile()
println '\njar:'
ant.jar(destfile: JAR, basedir: DEST, includes: '*.class')
}
if (args) for (t in args) this[t]() else this[DEFAULT]()
Самое обидное в том, что в groovy вполне можно написать в таком стиле:
ant.target(name: 'clean') {delete(dir: DEST)}
но паче чаяния такая цель будет выполнена немедленно после объявления - а это совсем не то поведение, которое нам нужно. А из этого unresolved issue в джире кодехауза следует, что путей борьбы с данной странностью разработчики пока не придумали.
Комментариев нет:
Отправить комментарий