Groovy

28 June 2007, 09:17 | Vadim Voituk

Groovy – объектно-ориентированный язык программирования разработанный для платформы Java как альтернатива языку Java с возможностями из Python, Руби, и Smalltalk.
Groovy использует Java подобный синтаксис с динамической компиляцией в JVM байт-код и напрямую работает с другим Java кодом и библиотеками.
Домашняя страница проекта: http://groovy.codehaus.org

Grails – фреймворк для создания web-приложений, написанный на Groovy с использованием Spring, Hibernate, Sitemesh. Grails исповедует идеи заложенные в фреймворке Ruby On Rails, и проецирует их в мир Java-технологий.

К сожалению русскоязычное сообщество пользователей Groovy & Grails пока достаточно бедно, потому если кт-то использует Groovy или Grails – просьба сообщить мне для формирования русскоязычного комьюнити.

Заметки, посвященные Groovy & Grails:

  1. What is groovy
  2. What non-Java language are you most interested in running on the JVM?
  3. Groovy: Extracting XML from your database (RU)
  4. Groovy documentation linkdump
  5. Groovy + JSON + Prototype in Action (РУС / ENG)
  6. Assertion based examples
  7. Groovy – it is like Visual Basic
  8. Groovy: if для невнимательных
  9. Groovy & GRails video
  10. More GRails video
  11. Не ant-ом единым… (РУС / ENG)
  12. Презентация Groovy на Exception#7
  13. and more

Неплохие заметки можно найти в разделе “Practically Groovy” на сайте IBM(к сожалению качество их русского перевода хромает)

  1. Сокращение кода с помощью Groovy (РУС / ENG)
  2. Программирование JDBC с помощью Groovy (РУС / ENG)
  3. Ускорение мобульного тестирования Java-кода с помощью Groovy (РУС / ENG)
  4. Функциональное программирование с помощью использованием замыканий и карринга (РУС / ENG)
  5. Написание сценариев Ant с помощью Groovy (РУС / ENG)
  6. Meta Object Protocol и мини-языки (РУС / ENG)
  7. Подмешайте немного Groovy в приложения Java (РУС / ENG)
  8. Fluently Groovy (ENG)
  9. ссылки на остальные русскоязычные статьи буду добавлять по мере нахождения
  10. PLEAC-Groovy [ENG]

Комментариев: 34

34 Responses to “Groovy”

Комментарии:

  1. axyd

    Привет Вадим!

    Я пытаюсь использовать грайлс в одном проекте, к сожалению пока с переменным успехом, много ошибок и сообщения о них не информативные. :(

    Но концепция и сама разработка на нём мне нравиться.

  2. Vadim Voituk

    Приятно узнать, что кто-то на просторах руНета использует Grails.
    Было бы интересно унать о реальном проекте на Grails.

  3. axyd

    Уффф, 1 неделя в среднем по 4 часа в день, прочёл “Груви ин экшен” и разбирался с ним.

    Офигенный недостаток, у него временами бывают совершенно неочевидные ошибки или он ведёт себя совершенно неочевидным способом. На разбор которых может уйти от 2х до 5 часов.

    Слишком много времени на ошибки …
    ———————————–

    И с самим груви тоже проблемы и ошибки, если попробовать написать на нём не хело ворлд одним скриптом а боль-менее реальный проект (с автозагрузкой изменённых файлов).

    Например он не может динамически загружать два класса которые ссылаются друг на друга и находяться в разных файлах (через ГрувиСкриптЕнжин ) – ошибка.

    Посмотрел исходники, но там реально чёрт ногу сломит или нужно сидеть неделю чтобы вьехать.

    Короче я пока рисковать не буду. Можно использовать для встраивания кусочков в сущ. приложение. Создавать на нём пока рановато.

  4. Vadim Voituk

    axyd: Спасибо за столь обширный комментарий.

    Сразу с чем хочется согласиться – это неочевидность выводимых Groovy ошибок – приходится traceBack вычитывать чтоб понять что он от тебя хочет.
    Но с опытом разработки и приходящим пониманием того, что стоит за фассадом языка – подобные неудобства уходят.

    Насчет невозможности загрузить 2 класса через GroovyScriptEngine – не пробовал, но посоветовал бы пошаманить над GroovyClassLoader-ом (IMHO он больше к такой задаче приспособлен)
    Кстати примеры есть в “Groovy In Action”.

  5. kirpi

    а grails подходит для разработки на java? или только на groovy?
    что есть подобное ruby on rails для java?
    извините за глупые вопросы

  6. Vadim Voituk

    Подходит и для разработки на Java.
    Единственное что все-равно прийдется описывать Domain-классы на Groovy.

  7. kirpi

    а gsp страницы? или можно и jsp использовать?

  8. Vadim Voituk

    А чем принципиально GSP от JSP отличаются? Да почти ничем.
    Но как ни крути от Groovy вы никуда в Grails не уйдете.
    Да и нужно ли?
    Мало ли фреймворков на Struts+SiteMesh+Hibernate…

  9. Overmind

    Возможно, я в корне не понимаю эту технологию, следовательно такой вопрос. Можно ли использовать Groovy как обычный скриптовый язык вкупе с Apache с помощью CGI? (как, скажем Perl). Пробовал настроить классическим способом, плевалась непонятная ошибка. Спасибо.

  10. Vadim Voituk

    В принципе ничего не мешает запускать Groovy-скрипт как CGI под Apache или ещё как-либо web-сервером (nginx, lighttpd, и тд). Но производительность такого решения будет ничтожно мала, т.к. для каждого CGI-запроса будет создаваться экземпляр и без того тяжеловесной JVM.
    Потому с среде WEB Java и Groovy приложения принято запускать в среде web-контейнера (Tomcat, Resin, Jetty, и тд), который берет на себя работу по исполнению Java/Groovy-кода в пределах одной своей JVM. Такой подход позволяет не создавать несколько экземпляров виртульной машины, а исполнять все в пределах одной многопоточной системы. К тому же появляется возможность использовать “общие” обьекты для нескольких запросов (например подключение к БД).

  11. vlad

    >>Приятно узнать, что кто-то на просторах руНета использует Grails.
    >>Было бы интересно унать о реальном проекте на Grails.

    Реальные проекты на Grails, выполненные украинскими разработчиками есть уже в live, несколько проектов почти готовы к выходу в live. Потробности обещаю в скором времени на http://groups.google.com/group/grails-ua :)

  12. unreger

    Idea 7.0.3
    JetGroovy plugin 1.5.16456
    grails echo2 plugin

    не могу наследовать в свои груви классы
    известная в граилс ошибка:
    [groovyc] Compiling 1 source file to /home/хххх/.grails/1.0.3/projects/nb/classes
    Compilation error: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, /home/ххх/grails-app/echo2/test.groovy: -1: You are not allowed to overwrite the final method getProperty(java.lang.String) from class ‘nextapp.echo2.app.Component’.
    @ line -1, column -1.
    1 error
    как уверяют, исправлена в груви 1.5.0

    думал на идею и плагин, может старые либы груви положили, но
    при компиляции из командной строки grails run-app – то же самое

    а граилс внутри себя держит груви 1.5.6
    и еще у меня отдельно стоит груви 1.5.3
    так что в любом случае должна. бы.

    и что делать?

  13. vlad

  14. unreger

    спасибо
    вобщем все плохо
    граилс хранит внутри себя свою версию груви (вместо того чтобы пользоваться внешней) и поменять эту внутреннюю версию не знаю даже возможно или нет
    вобщем я буду ждать новой версии граилс
    придется пока echo2 классы писать на java

    никто с echo2 не работал?
    как создать событие на нажатие кнопки мыши
    среди готовых такого нет
    почитал про создание компонентов WritingYourOwnComponentPeersPart1 (ссылка потерялась) – вроде бы можно, но там просто страшно браться,
    может быть есть другой способ зарегистрировать свой обработчик?

  15. Groovier

    А можно по-подробнее Groovy-скриптах, работающих как CGI под Apache? Как настраивается, что для этого требуется. Встречал аналогичный вопрос встречал здесь: http://groovy-forum.org/viewtopic.php?t=308

  16. Артём

    А начал с Груви, но BeanShell оказался во многом лучше для меня.

  17. Inside

    А может кто нибудь рассказать как в Grails с плагином acegi получить текущего пользователя ( объект )

  18. Слава

    Привет :)

    Мучительно пытаюсь выбрать между Ruby и Groovy.
    Есть ли какие-нибудь фичеры, которые есть в Groovy, и которых нет в Ruby, или наоборот?

    Например, можно ли там передавать функции как аргументы в метод и возвращать их?

    Заранее признателен :)

  19. Vadim Voituk

    @Cлава,
    Тут и выбирать нечего – однозначно Groovy.

    >>Есть ли какие-нибудь фичеры, которые есть в Groovy, и которых нет в Ruby
    Есть: производительность, JVM-совместимость, отличные библиотеки.

    >>можно ли там передавать функции как аргументы в метод и возвращать их?
    В Groovy есть замыкания, с которыми можно делать все описанное выше и даже больше:)

  20. Слава

    Понятно, спасибо большое :)

  21. alex

    Почитал про Groovy – вам не кажется стремным переходить но новую технологию, которая еще не сильно изучена?

    Я смотрю на это как директор фирмы.

    Не знаю, как там по части заказов, возможно и на Groovy можно найти.

    Но применение новой технологии чревато большими затратами.

    Хотя, есть шанс подсесть “на волну” :-)

  22. Max

    ппц. директор. волна. первый коммент на это странице February 17th, 2008 at 8:23 pm

  23. meowth

    На ваш вгляд, Вадим, Groovy лучше, чем JRuby? Выбираю между тем и другим, никак не определюсь

  24. Vadim Voituk

    @meowth,
    Да нечего там выбирать – ничего в Groovy нет такого, что есть в JRuby.
    Да и Ruby, как язык в отрыве от RoR особо ничем не выделяется.

  25. Rimidalv

    Помогите разобраться: создаю класс наследованный от JPanel, и пытаюсь использовать его вместо SwingBuilder’овского ‘panel’, он же мне выдает ошибку

    Exception in thread “main” org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object ‘javax.swing.JPanel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=java.awt.Dimension[width=800,height=800],minimumSize=,preferredSize=java.awt.Dimension[width=800,height=800]]’ with class ‘javax.swing.JPanel’ to class ‘animeditor.TabPanel’

    Код вызова:

    TabPanel p = panel(layout:null,maximumSize:[800,800],preferredSize:[800,800] )
    {}

    Код определения класса:

    class TabPanel extends JPanel
    {
    public String title
    }

    Заранее спасибо

  26. Slava

    Swing Builder panel тэг создает обьект типа JPanel. Т.e. имеецца:

    TabPanel p = new JPanel();

    А так низя, это неправильное использование наследования. Мона тока наоборот. Я бы сделал так:

    def thePanel = panel(lmaximumSize:[800,800],preferredSize:[800,800] )
    {}

    def tabPanel = new TabPanel(thePanel)

    только нужно соответствующий конструктор определить.

  27. Vladimir Grichina

    Мы в своем блоге пишем тоже про Grails/Groovy/Java:
    http://www.componentix.com/blog

    Правда на английском, но есть один перевод на Хабре:
    http://habrahabr.ru/blogs/java/75774/ (Делаем мэш-ап Twitter’а и Google Maps за 20 минут на Grails)

  28. webdizz

    Привет, я тоже пытаюсь использовать Grails в своем новом проекте. Очень приятно, быстро и комфортно работать, правда не без нюансов.

  29. val che

    хай.
    из реальных проектов что мы запускали на груви: prazdnik-help.ru , trucks.ru. Был еще 1 голандский но не помню урл :-)

  30. Anatoly

    А где найти литературу по языку и груви фреймворку? Где найти хостинг, или как установить на VDS?

  31. Ivan

    (Для новичков, таких как сам)

    Ruby, RubyRails – типакруто, но “вещь в себе” по сравнению с JAVA и всем, что работает на JAVA (как Groovy-Grails)

    Год по-дилетански “изучал” Rails и Ruby вывод: как только стал делать не туторы а то-то свое – пришлось лезть в такие дебри, что послал Rails на… в конце концов!

    Теперь вижу такой путь в программирование:

    1. JAVA в основе! Для полных нулей-чайников, как я – читайте книшку “Философия JAVA” и что нить практичное. Программируйте роботиков в игре Colobot. Всяких Вомбатиков и Фигуристочек в учебных проектах типа GreenFoot и Alice.

    2. Изучите JAVA технологии, потому что JAVA это не только язык но и платформа с кучей решений на все случаи жизни!!!

    от 3D до WEB, от Мобильника до SQL, от криптографии до научных расчетов при чем в разных парадигмах и философиях (JSP, JSF, Applet, Servlet, EJB)… в общем у-у-ух! :)

    А самое улетное, что технологии можно “скрещивать”, типа 3D в идеологии Java Beans, как элемент в научной модели, запущенной сервлетом на сервере WWW и отображенное на экране мобильника!

    3. Grails – модная тенденция …ails`ов всевозможных, заложенная Rails для Ruby, Groovy, соответственно, эволюционный ответ Ruby от JAVA.

    Сам руби за последний год потерял несколько пунктов популярности в рэйтинге языков (JAVA к стати тама лидер последние 10 лет)

    Изучать Grails и Groovy, как ни странно нужно ПОСЛЕ Java и AJAX а не ДО и не ВМЕСТО!

    Сам создатель Rails “мимо ходом” говорит: “… посмотрите на громоздкие монстро-WEB-проекты на Java и C, один человек не в состоянии постичь их функциональность, поддерживать и развивать их для этого я и придумал Rails!”

    Я сам на это повелся а теперь понял две вещи:

    1. “сложнющие проекты” – НИКОГДА не станут “простецкими” по-определению! Их всегда будет невозможно постигать в одиночку в рамках единственной технологии/платформы!

    2. И Ruby и Groovy имеют “очевидно упрощенную” лексику для того, кому очевиден код Java или C.

    В общем резюме: Энтерпрайз-проекты в СНГ – банальны и сложны количественно а не идейно, для них идеально подходит Java – платформа во всем многообразии своих технологий.

    пардон за многословность :)

Leave a Reply