Предварительные требования для Groovy: установленный JDK и прописанный JAVA_HOME (в ALT Linux для этого достаточно сказать apt-get install java-1.6.0-sun-devel tzdata-java). Процесс установки выглядит так:
# cd /opt # wget http://dist.groovy.codehaus.org/distributions/groovy-binary-1.7.0.zip # unzip groovy-binary-1.7.0.zip # ln -s groovy-1.7.0 groovy # cat > /etc/profile.d/groovyhome.sh << EOF > GROOVY_HOME=/opt/groovy > export GROOVY_HOME > export PATH=$PATH:$GROOVY_HOME/bin > EOF # chmod 755 /etc/profile.d/groovyhome.shПричины неиспользования groovy из альтовского репозитария (или JPackage в общем случае) просты - огромный список зависимостей, большая часть которых мне никогда не потребуется, и, как следствие, протухшие версии зависимых пакетов да и самого groovy. Проблема переносимости в случае ad-hook scripting менее актуальна, однако при увеличении размеров проекта она вполне может проявиться.
Теперь перелогинимся и убедимся в том, что Groovy у нас есть:
$ groovy -version Groovy Version: 1.7.0 JVM: 1.6.0_17а затем напишем традиционный Hello World:
$ cat > hello.groovy << EOF > #!/usr/bin/env groovy > > def hello(name) { > println("Hello $name!") > } > > hello("World") > EOF $ chmod 755 hello.groovy $ ./hello.groovy Hello World!Ну и тормоз же он однако:
$ time ./hello.groovy Hello World! 3.18user 0.18system 0:02.22elapsed 151%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (1major+25068minor)pagefaults 0swapsИ даже предварительная компиляция и запуск готового байткода помогает не сильно:
$ groovyc hello.groovy $ time java -cp .:$GROOVY_HOME/embeddable/groovy-all-1.7.0.jar hello Hello World! 1.88user 0.10system 0:01.60elapsed 123%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (1major+15771minor)pagefaults 0swapsХотя здесь как раз нет ничего удивительного - скоростью запуска JVM никогда не отличалась. Для разных мелочей эту проблему можно обойти с помощью Groovy Shell:
$ groovysh Groovy Shell (1.7.0, JVM: 1.6.0_17) Type 'help' or '\h' for help. ------------------------------------------------------------------------------------ groovy:000> def hello(name) { groovy:001> println("Hello $name!") groovy:002> } ===> true groovy:000> hello("World") Hello World! ===> null groovy:000> exitДля отлаженных скриптов лишних 3 секунд на запуск уже не очень жалко, ну а запускать их (и JVM вообще) слишком часто никто в здравом уме не станет - постоянно запущенный сервис будет работать значительно эффективнее.