IT-companies
26 October 2008

Разработка на 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.

+20
2.4k 42
Comments 43
Top of the day