Pull to refresh

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

Reading time 5 min
Views 3.1K
Более полугода назад была написана статья Разработка на Flex в IntellliJ IDEA с использованием maven — она была обзорной и писалась в самом начале использования означенных инструментов. Теперь же хочется резюмировать и рассмотреть все более подробно — в этой статье будет дан обзор текущей ситуации и тех плюшек flexmojos, аналога которым вы не найдете нигде более.



Текущая ситуация. Что изменилось


Если полгода назад только маньяки могли настроить среду (под средой я подразумеваю не только IntelliJ IDEA, но все окружение в целом, включая прокси-сервер репозитория) так, чтобы оно не мешало работе компании и не вынуждало рядовых сотрудников вздыхать о спокойных временах, то теперь:
  • Нет необходимости во Flex SDK. IntelliJ IDEA сама для себя создаст все что нужно — отладка и компиляция будут работать. Пока что нет поддержки AIR SDK в силу проблем с лицензией. Мы решаем с Марвином данный вопрос — после стандартизации координат артефактов (со стороны jetbrains уже все решено) необходимо будет сделать примерно то же, что и с Sun JDK в linux — самостоятельно опубликовать в свой репозиторий. Таким образом не нужно иметь отдельный сервер синхронизации (это актуально, если вы часто обновляете SDK, накатываете на него свои патчи).
  • Полноценная компиляция в IDE/консоли без дополнительной настройки. flexmojos создает для IntelliJ IDEA полноценную конфигурацию — такое прямое отображение и возможность дешево получать сложный flex-config есть только во flexmojos (Инкрементальной компиляции во flexmojos нет, Марвин на мой вопрос предложил релизовывать ее мне самому — пока что перспектива появления этой фичи туманна). Таким образом, после mvn compile -DconfigurationReport=true, вы можете без всяких проблем осуществлять make в IntelliJ IDEA (только не используйте родной fcsh — там критическая ошибка в алгоритме расчета config checksum develar.livejournal.com/77034.html). В ближайшие пару недель flexmojos будет создавать конфигурацию для IDEA даже без первоначального билда.
  • Работающий inspection без настройки. namespace, resource bundle, locale — все это будет работать без какой-либо настройки (указанная ссылка только для информации, повторюсь — just open POM, ничего настраивать не надо). conditional compilation тоже поддерживается, но его текущая реализация такова, что токены не валидируются, таким образом отсутствие define пока что не проверяется — только на уровне синтаксиса.

Собственно, что нам еще надо от IDE? IntelliJ IDEA на данный момент единственная среда, которая на таком уровне — just open POM (я лукавлю только о первоначальном mvn compile -DconfigurationReport=true, но и это будет убрано к финальной версии Maia (наверняка уже к сентябрьским EAP)), поддерживает flex разработку. Замечу — поддержка приложений не уровня helloworld. Подробная статья о работе в среде будет позже (так как текущий workflow будет упрощен), пока что лишь отмечу, что проект удобно хранить в directory based format, с игнорированием *.iml, .idea/libraries.

Таким образом, от IDE нам нужна сейчас всего одна вешь — поддержка flexunit. Пока что все печально. Но данный вопрос уже обсужден и будет решен в ближайший месяц (со стороны jetbrains www.jetbrains.net/jira/browse/IDEADEV-39280, а со стороны flexmojos community доработка test mojo для сбрасывания дампа конфигурации).

Плюшки flexmojos

  • load-externs. У нас есть приложение. Оно в двух версиях — web и desktop (AIR). Приложение скинуется и скин, style module, подгружается в runtime. Мы хотим оптимизировать скин для этих двух версий — load-externs. Представили, что нужно для этого без flexmojos? В POM приложения мы устанавливаем linkReport в true, а в скине указываем зависимость от артефакта с координатами приложения, но с заменой типа на xml и классификатора на link-report. Что может быть проще?
  • resource modules/libraries. Для их получения нужно всего лишь указать runtimeLocales. И для приложения вы получите modules, а для библиотеки libraries. Замечу, что реализовано это как одна большая проблема (develar.livejournal.com/71672.html, develar.livejournal.com/70325.html), но для большинства пользователей подходит (Если вы работате с locale chain, вы наверняка наступите на грабли, но таких issues никто не писал ;))
    <runtimeLocales>
      <locale>en_US</locale>
    </runtimeLocales>
  • RDF. Это далеко не killer плюшка, но просто приятно (впрочем, эта фича зачастую бесполезна, так как inheritance в большинстве случаев невозможен для flex POMs, а aggregation выстраивает только project references).
  • Манифесты. Чтобы включить манифест в библиотеку, вы должны указать namespace + includeNamespace (дублирование URI). После этого почувствовать убогость компилятора не только в плане скорости, но и архитектуры — включение манифеста _всеми_ пользователями (я был удивлен тем, что Марвин тоже считает поведение компилятора ошибочным) рассматривается как акт поддержки пространств имен в MXML, но никак не как акт include — в результате мы либо имеем circular reference error, либо вынуждены постоянно доказывать компилятору что нужно подключить некий класс (скажем, на некую утилиту в самой библиотеке ссылок может не быть). flexmojos предоставляет вам мощный и удобный синтаксис — не нужно указывать ни namespace, ни includeNamespace; не нужен даже файл манифеста. Если вы используете mate и хотите иметь пространство имен для ваших EventMap, то все что вам нужно написать, это
    <manifests>
      <manifest>
        <uri>http://example.com/2009</uri>
        <includes>
          <class>**.maps.*</class>
        </includes>
      </manifest>
    </manifests>
    И всё, все EventMap будут в указанном пространстве имен, при этом не включеные в манифест и не имеющие ссылок на себя классы будут также включены в библиотеку.
  • WAR. Если вы укажите в зависимостях WAR ваше приложение и привяжите цель copy-flex-resources, то flexmojos скопирует само приложение и все что с ним связано (modules, rsls).
    <execution>
      <id>copy flex resourcs</id>
      <goals>
        <goal>copy-flex-resources</goal>
      </goals>
    </execution>


Это особые плюшки flexmojos, помимо того, он, будучи плагином к maven, обладаем большим количеством унаследованных плюшек — maven, будучи декларативной системой сборки, вполне оправдывает себя — мы нисколько за полгода не разочаровались в выборе.

Update на комментарии
Ничего не сказано о flexmojos, потому что об этом было сказано в первой части, на которую была дана ссылка, самая главная ссылка для понимания что flexmojos это плагин системы сборки maven для поддержки flex и зачем нам нужен maven — riapriority.com/blogs/agahov.php/2007/11/23/maven.

И о «С удивлением узнаю что Идею нельзя использовать без Мавена :), это очень далеко от истины» — пост написан человеком «верящим» в CI и посвящен плюшкам соответствующего инструмента сборки. IntelliJ IDEA вполне может скомпилировать проект и быть настроена нетривиальным образом путем custom config file, но мы же вроде как с вами инженеры (опускаю момент прототипов, тем не менее, в силу концепции архетипов и этот вопрос тоже снимается)?
Tags:
Hubs:
+2
Comments 12
Comments Comments 12

Articles