Разработка на Flex в IntellliJ IDEA с использованием maven

    При разработке на ActionScript, как и на любом другом языке, возникает два вопроса: «В чем писать?» и «Чем собирать?». Если вы продвинутый разработчик, вы наверняка уже используете IntelliJ IDEA как IDE и maven как инструмент сборки. Данная статья показывает оптимальность этого решения и описывает процесс настройки рабочего окружения. Если вы не любите пиво (и не понимаете смысл этой фразы и на кого я только что кивнул) и не считаете себя ленивой скотиной, можете не тратить свое время.

    Статья скорее искра, чем пошаговое руководство, тем более, посвящена EAP, поэтому если вы ну совсем ленивая скотина без капли риска, то ждите релиза :)



    Отмечу, что установка будет рассматриваться в Windows, но все ПО кроссплатформенно — Unix, Mac и Windows (я сам только недавно переполз на M$ Vista с openSUSE из-за AIR). Конфигурация моей машины: ThinkPad T61, Intel Core 2 Duo T9300 (2.5 GHz), 2 ГБ RAM, Windows Vista SP1. На сервере хранилища (оно вам вряд ли понадобится) FreeBSD 6.3, nginx 0.6.32.

    Обзор возможностей IDE


    До недавнего времени более менее реальной альтернативы Flex Builder не было. Но в грядущей версии IntelliJ IDEA именуемой Diana появился отладчик и поддержка Flex стала приемлимой. Что такое IntelliJ IDEA и что она может? Проще сказать что она не может. Она не умеет варить кофе (только косвенно, через IDE Talk). В силу этого сравнение ее с Flex Builder равносильно сравнению возможностей пешехода с гоночной машиной в контексте прохождения дистанции на скорость.

    Объективно:
    • Менеджер выражений import в MXML (Flex Builder умеет оптимизировать только в AS). Мало того, вы посмотрите на скриншот как это отображается (под рукой нет сейчас крупного mxml компонента для создания полноценного скриншота, но когда там 4 группы по 5-12 выражений, выделение серым улыбает, а неспособность FB следить за этим хозяйством заставляет задуматься о смене IDE).

    • Экспорт проекта для ANT. То есть она переводит свои метафайлы проекта в файлы ANT, что позволяет вам не париться на тему, как кто-то будет собирать ваш проект без IntelliJ IDEA (но лучше всего сразу использовать инструмент сборки).
    • Отображает использование элемента в проекте на лету в контексте где это действительно нужно без необходимости явного использования Find Usages (который работает для всех элементов). Flex Builder умеет только Find Usages, к тому же список элементов мал и работает это только до момента изменения зависимого исходного кода, после надо перезапускать среду :), иначе список найденного будет заведомо мал.



    • Подсветка кода. Эх, только одно слово которое говорит простой русский мужик смотря на луну. Это больше чем подсветка. Диана не блондинка.
    • Даже если вы придете домой пьяный, Диана вас накормит и не будет возмущаться, что вы какой-то сторонний файл не принадлежащий ни к одному из проектов, а безропотно сделает все, что в ее силах из того, что делала когда вы были чистый и трезвый.

    Тут можно писать очень длинный список. Она и в самом деле весьма интеллектуальна. Вы просто попробуйте (особенно, разумеется, это оценят те, кто работает над крупными и сложными проектами). У Flex Builder есть только одно преимущество — профилирование. Тут в комментариях сомнения пошли, так что добавлю еще парочку возможостей, которые следовало бы перечислить первыми: Generate и Refactor.

    Субъективно:
    • В файловом дереве видны метафайлы проекта созданные средой, то есть .project для Eclipse и *.ipr. Если мне нужно залезть в них грязными ручками, я могу сделать не выходя из.
    • В настройках можно найти включение антиалиасинга, что небходимо в Windows XP для ClearType шрифтов типа Consolas (наверняка, и для Eclipse можно найти решение, но тут оно прям на глазах — собственно, поэтому и субъективно).
    • Свертывание кода изначально настроено, а не просто — нате чистый лист. В таком не настроенном виде если оно мне понадобится, я дам автору кода пистолет чтоб он выстрелил себе в ногу за god class. И такая продуманность во всем (Flex Builder даже не умеет подсвечивать xml, в честь чего я должен сам допиливать платный продукт ставя плагины первой необходимости?).
    • Список открытых файлов проекта хранит в самом проекте. Знаете, что это означает? Это означает, что если вы держите ее метафайлы проекта в SVN, то придя домой и открыв редактор, вы получите тот же набор открытых файлов, что и на работе (да, немного сомнительный плюс).

    Обзор инструмента сборки


    Зачем вообще он нужен, если IDE и так поддерживает компиляцию? Если для вас это не очевидно, рекомендую прочесть статью в википедии. Почему maven, а не ant? Потому что maven это декларативная, а не императивная сборка. Хорошая подборка ссылок о maven в Agahov's blog. В настоящий момент какой-либо реальной альтернативы набору плагинов flex-mojos обеспечивающих заклинания для Flex нет.

    Установка IDE


    Итак. Теперь пора установить ее. Качаем последний EAP (на момент написания статьи последний EAP — 8940, я рекомендую не экономить несколько МБ и качать installer весом 111 МБ) и устанавливаем ее. При первом запуске она спросит о настройках, лицензии, плагинах, то есть произведет начальную настройку.
    Кстати, о цене. Для opensource проектов она бесплатна. Для тех, кто связан с образованием она также бесплатна или предлагается со значительной скидкой. Для личного использования стоит всего $249. А Flex Builder 3 Standard стоит в разы дороже — целых $249. Почувствуйте разницу. Поэтому у меня рука не поднялась в свое время купить его, а вот за IntelliJ IDEA я не раздумывая заплатил, даже имея возможность получить бесплатную лицензию.

    При выборе устанавливаемых плагинов ставьте только то, что вам нужно, так как это, понятное дело, снизит потребление ресурсов (а также уберет из интерфейса лишнее). Впоследствии вы сможете удалить/добавить плагины в File -> Settings -> Plugins


    После установки рекомендую сразу же увеличить выделение памяти для IDEA — откройте bin/idea.exe.vmoptions в ее корневой папке: -Xms256m -Xmx512m -XX:MaxPermSize=128m
    Возможно, вам в изначальной настройке редактора что-то покажется странным. Но все настраиваемо, ниже описано часть того, что мне не понравилось и пути решения:
    • Вид. Почему Look And Feel по умолчанию инопланетный? В Appearance -> Look And Feel = Windows.
    • Установка курсора в редакторе куда угодно, а не на конец строки. Мне лениво целиться (в Eclipse на конец строки по умолчанию), поэтому Editor -> Behavior -> Снимаем галку в Allow placement of caret after end of line.
    • Пробелы вместо табуляции для отступов. Опять же во Flex Builder по умолчанию табуляция, а тут я должен расстреливать очередями эти пробелы. GlobalCode Style -> Ставим галку в Use tab character (обратите внимание на Use same settings for all file types).

    Если вы будете использовать не рекламируемый тут мной maven, а встроенный IDE Builder, то для решения проблемы вывода компилятором ошибок на русском (у вас тоже неприятие мозгом русского языка в таком контексте, да?) открываем bin/jvm.config в используемом Flex SDK и добавляем к java.args параметры -Duser.language=en -Duser.country=US (так как IDE Builder использует fcsh), при сборке чем-то иным, меняйте параметры JVM в соответствующем месте. Если же будете использовать maven, читайте ниже.

    Все. Установили и открыли. Помним, что это EAP.


    Установка инструмента сборки.


    Его ставить не нужно. Maven встроен в IDEA (но вы можете и указать использовать внешний). Но настроить его я все же рекомендую. Для искоренения русского языка установите переменную окружения MAVEN_OPTS = -Duser.language=en -Duser.country=US). Если будете устанавливать его отдельно рекомендую изменить настройки памяти -Xms256m -Xmx512m -XX:MaxPermSize=128m (я отдельно ставил из портов в FreeBSD — установка прошла без проблем).

    Создание проекта


    Рассмотрим разработку простейшего проекта HelloWorld.

    1. File -> New Project
    2. На этом шаге можно ничего не менять и просто нажать Finish. В настоящий момент есть архетипы для flex-проектов, но дабы не усложнять мы использовать архетип не будем.

    После этого проект будет открыт.


    Для компиляции проекта не нужно ничего вручную скачивать, но для полноценной работы IDEA ей нужен исходный код Flex SDK. Скачайте последнюю стабильную сборку (на момент написания это 3.2.0.3794 от Thu Oct 23, 2008), разархивируйте куда-либо и установите его в IDEA.
    1. File -> Project Structure

      И укажите путь



      К сожалению, в IDEA сейчас существует ошибка в определении Flex SDK по умолчанию для Flex Facet (точнее, тут вообще не должно быть facet, помним, что это EAP), поэтому укажите вручную: File -> Project Structure -> Facets -> Flex HelloWorld)


      Теперь можно творить.
      1. Переименуем (Refactor -> Rename или Shift + F6) папки scr/main/java и src/test/java меняя java на flex соответственно (их заботливо создал maven, если вы будете создавать проект из архетипа, то ничего переименовывать не придется).
      2. В соответствии со структурой проекта предлагаемой maven создадим New Mxml Component.


      3. И вставим следующий код: [HelloWorld.mxml]
      4. Отредактируем pom.xml: [pom.xml]
      5. После сохранения изменений pom.xml IDEA предложит re-import проекта (то есть она в соответствии с новым POM обновит все что нужно (да, пока, она криво это немного делает, но разработчки извещены и работают над этим)).
      6. В папке target результат, HelloWorld-1.0.swf result.png


      Я никак не прокомментировал POM. Ссылки на уже были даны. Замечу только, что из-за того, что в настоящее время в мире Flex maven мало распространен, большинство библиотек в центральном хранилище отсутствует. Вы можете добавить ваш maven проект в центральное хранилище, но стороннюю библиотеку вряд ли, поэтому для себя я поднял сервер (который и указан в repositories), http://maven.flyti.org (если вам нужна какая-то библиотека, то вы можете написать мне и я добавлю ее в мое общедоступное хранилище, но лучше все-таки будет просить создателей чтобы они выложили в центральное).

      Update 0 как ответ на комментарий
      Не вижу объективных преимуществ для переноса своих проектов в новую IDE. Куча гемора ради раскраски кода? Увольте.

      Если перечисленных объективных премуществ, таких как поддержка maven и ant, возможность работающего find usages без запроса по контексту и т. п. указанного уже выше вам мало, то я забыл еще два более главных и наиболее важных преимущества: Generate и Refactor.

      Update 1
      Зависимость от артефакта compiler должна быть в plugins, реальный пример POM.

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

      0
      Вот бы плагин для андроида таким же хорошим был, так нет же — не пашет. А эклипсовый почему-то отказывается работать под убунту. Я конечно понимаю что у меня руки кривые, но чтобы для двух IDE сразу…
        0
        Дык EAP ещё. До релиза допинают. А вообще, если есть ошибки — сообщайте в bug tracker. А вопросы задавать можно на странице плагина.
          0
          Доделаем ближе к концу года (т. е. уже после релиза IDEA 8)
          0
          о-ла-ла! спасибо :)
          хотя в последнее время очень далек от Флекса но все равно добавил в мемориз ибо вероятнее всего оно мне еще пригодится. Заодно и с Maven'ом познакомлюсь а то раньше с ним не сталкивался а самому колупать недосуг было…
            0
            www.adobe.com/devnet/flex/articles/fullstack_pt1.html тут инструкция для flex+maven+hibernate+spring+blazeds ну для идеи добавить mvn idea:idea, на каком-то EAP дианы без проблем вроде вставало.
            0
            Давно раздумываю купить персональную версию.
            В избранное. Спасибо!
              0
              зачетная статья, присоединяюсь к восторгам по поводу Dian-ы ) теперь надо будет и Flex поковырять
                0
                Не вижу объективных преимуществ для переноса своих проектов в новою IDE. Куча гемора ради раскраски кода? Увольте.
                  0
                  flyti.org/im/screenshots/tip_implementation.png

                  И, да, я забыл самое главное — список поддерживаемых рефакторингов. Сейчас обновлю, спаспибо.
                    0
                    Обновил, но просто она действительно не блондинка — тест-драйв возьмите, но в следующий раз я буду более убедильно вещать и постараюсь огласить весь список.
                      0
                      Не в вас дело, а в IDEA. Статья отличная, однако в мои личные планы входит установка релиз билда Enterprise IDE поверх билдера. Даже с глючной бэтой работа стала гораздо веселей.
                        0
                        Я тоже ставил плагин Enterprise IDE, правда бету. Проблема в том, что она не встраивается в контекст, а требует открытия отдельной перспективы/окна, то есть та же генерация сеттеров/геттеров не в контекстном меню при редактировании кода. Пробуйте IDEA :)
                    0
                    Хорошая работа, коллега, рад видеть здесь! Среда на первый взгляд, действительно, очень комфортная, правда я совсем не знаком с maven.

                    Что будет, если при создании проекта выбрать «Flex module» — idea будет работать напрямую с mxmlc?
                    0
                    Хорошая статья, Idea 8 пользуюсь вовсю и давно, захотелось теперь и flex попробовать.
                    Странно, но в моей версии Idea нет пунктика Create Maven Module, или это у вас плагин довешен?
                      0
                      Поддержка maven идет с коробки и предустановлена. Вероятно, вы его вырубили.
                        0
                        Поставил версию поновее (8940) — все появилось
                        + еще появился Grails Application
                      0
                      когда флекс-буилдер для линукса станет платным, то можно будет подумать о приобретении этой вещи. на сколько я понимаю в свежих версиях IDEA поддерживает mxml?
                        0
                        Да, поддерживает mxml. Даже лучше чем Flex Builder — для нее нет разницы между MXML и AS при наведении порядка в import.

                        Под linux FB не поддерживает даже тот единственный вид рефакторинга, что есть, оно вам надо такое?
                        0
                        >> я сам только недавно переполз на M$ Vista с openSUSE из-за AIR

                        расскажите поподробнее. сейчас я разрабатываю AIR приложения для внутренних нужд (сам работаю на линуксе), обнаружит только две проблемы — в старых альфах ужасно работает NativeMenu, в свежей бете при browseForSave выбирается пустой путь. первая проблема соответственно ушла вместе со старой версией, новая обходится созданием собственного диалога сохранения — так и так у нас половина людей на линуксе.
                          0
                          Решение принималось до September 15th, 2008. Да и тестировать лучше. Но, да, наверное к openSUSE 11.1 уйду обратно на нормальную ось.
                          0
                          Для личного использования стоит всего $249. А Flex Builder 3 Standard стоит в разы дороже — целых $249.

                          В разы — это в один раз? :)
                            0
                            Это не опечатка ;)
                            0
                            Спасибо за статью. Очень интересно, глаза разбегаются. В плагинах разобраться бы. А вы занимались переносом проектов из других IDE в IDEA и обратно? из Флекс билдера, например.
                              0
                              Я не из спортивного интереса и не из-за «о, круто, иконочки, стрелочки» взялся за это дело, а из-за четкого понимания, что IDEA сэкономит мне кучу нервов и времени. Пока что IDEA это EAP, да и заклинания flex для maven в развитии. Переносом занимался, причем сложных, завязанных на многом и использующих продвинутые опции компилятора — из-за этого перенос напоминает "* сочувствующий взгляд: парень, тебе б девушку, что ли", но кто иначе кроме нас будет пинать разработчиков?
                                0
                                code.google.com/p/flex-mojos/issues/detail?id=125

                                Но, разумеется, все это обходится (мы то знаем на чем вся эта абстракция строится) и build successful от maven я получаю и пользуюсь интеллектуальностью Дианы :) (главное писать тикеты разработчикам, чтобы в релизе все работало для нормальных которым нужно чтобы все _просто_ работало).
                                  0
                                  я далеко не профессионал. у меня есть домашний проект флешевый на AS3, который я пишу на ФлексБилдере. вопрос в том, стоит ли мне заморочиться и перейти на IDEA. учитывая, что проект уже довольно объемистый и в перспективе станет еще толще, плюс появятся элементы на других языках программирования (нужен будет сайт с динамичными элементами PHP/AJAX). как-то так. сейчас я с эклипсом очень мучаюсь потому что не могу найти IDE для остальных элементов моего проекта. не хочу иметь несколько IDE для каждого из элементов проекта, которые у меня будут.
                                    0
                                    С поддержкой PHP у IDEA не всё так гладко, однако если захотите написать серверную часть на Java/Groovy/Scala/Python/Ruby — это всё будет в релизе 8-ки.
                                      0
                                      спасибо
                                      0
                                      >> стоит ли мне заморочиться
                                      А, в чем, собственно, заморочки? Заморочки из-за глюков, так как EAP? Ну, тут на вашу совесть — хотите чтобы релиз был такой какой нужно, участвуйте почти как в opensource проекте (что, кстати, возможно и на полную катушку, т. к. часть плагина открыта и патчи приветствуются). Заморочки из-за того, что вы не постигли Дао программирования и на вас не снизошло просветление (т. е. абсолютное спокойствие с единственной заморочкой «где мои тапки»)? Ну, развивайтесь.

                                      Если одна IDE в ответ на просьбу переименовать _private_ переменную грузит все мои открытые библиотеки и 5 минут чего-то там ищет, а потом еще 3 что-там компилирует, а другая за _100 мс_ мне сделает хорошо (и при этом еще не будет ничего спрашивать, а просто заткнется и прям по месту сама догадается, да еще красиво все это отрендерит), то у меня как бы не будет особых сомнений — я лучше недельку буду курить маны, выучу новый язык чтобы писать патчи, но буду ее иметь.
                                        0
                                        стесняюсь своих способностей и боюсь сделать плохо или не правильно :)
                                          0
                                          bash.org.ru/quote/88352 — вот это плохо. все остальное хорошо. хуже уже не будет. Мартина Фаулера на слезу пробило в заключении Рефакторинга.
                                            0
                                            да у меня как-то желания со способностями плохо пересекаются. AS3 очень хорошо пошел, нужен теперь сервер… вот и смотрю я на пример сокет-сервера на java (в хелпе флешевом есть) как баран на новые ворота и думаю… а с какой стороны к этому БД прикручивать :) ну да ладно… это уже к теме не относится :)
                                              0
                                              Думаю BlazeDS пойдёт
                                                0
                                                круто! спасибо посмотрю.
                                  0
                                  В параметре '-XX:MaxPermSize=768m' imo есть опечатка, 140m должна хватать всегда
                                    0
                                    >> 140m должна хватать всегда
                                    когда ОНО начинает индексировать Flex SDK при создании проекта, то оно скромно выводит окошко с требованием увеличения памяти.
                                      0
                                      А разве диалог говорит OutOfMemoryError: permgen space?
                                      Обычно (просто OutOfMemory) просто изменяем параметр '-Xmx512m'…
                                        0
                                        точно. исправил.
                                    0
                                    Скриншоты умерли? :(

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое