Пробуем Flexmojos 4

С выходом Maven 3 специально под него Flexmojos был переписан заново, практически с нуля. И получил номер версии 4. Релиза, правда, еще нет, есть бета-версии.

И я решил попробовать это дело в новом проекте. В рамках общего курса ухода от велосипедов и стандартизации всех тулов и процессов в разработке, я решил уйти от форка Develar (оказалось, что не на долго, быстро вернулся назад) и освоить стандартную ветку flexmojos.

Сейчас не будет какого-то глубокого обзора, а просто некоторые впечатления от попытки использовать эту версию.

Итак, в super pom указываем версию


<flexmojos.version>4.0-beta-3</flexmojos.version>

И подключаем репозиторий:


<repository>
    <id>sonatype-repository</id>
    <url>https://repository.sonatype.org/content/groups/flexgroup/</url>
    <releases><enabled>true</enabled></releases>
    <snapshots><enabled>false</enabled></snapshots>
</repository>

Вот и вся разница. Целиком pom можно посмотреть, например, здесь. А pom модуля, соответственно, здесь.

Вообще настроить новый проект с нуля довольно легко. (А большой старый проект переделывать под flexmojos 4 нет никакого смысла).

Из позитивного:

  • собирается быстрее;
  • транзитивные зависимости теперь работают;
  • стандарт, не какой-то там велосипед, ага;

ну и все, пожалуй.

Из негативного:

  • Я привык разносить код и ресурсы модуля в разные папки (по стандартам maven). Теперь так сделать нельзя, ибо flexmojos 4 не умеет подключать дополнительный src каталог. Нужно класть все вместе -- и код, и ресурсы.
  • опция warnings.noConstructor теперь не работает, и при сборке мы имеем кучу ругательств компилятора по поводу классов, в которых не определен конструктор. (Принципиально не пишу конструкторы, если они пустые. А они в 95% случаев пустые).
  • Ну и главное -- интеграция с IDEA стала хуже. Новые flexmojos генерирует неполноценный flex-config.xml, и из-за этого IDEA не хватает инфы, чтобы полностью сконфигурировать модуль.

С ресурсами возникли и другие проблемы, и о них особо.

Я взял за правило большинство ресурсов выносить в отдельный swc модуль. Это существенно ускоряет сборку в обычном рабочем цикле, ибо компилятору не нужно пережевывать эти ресурсы в остальных модулях. Обычно проект выглядит как-то так:

  • common-resources (images, fonts, css и т.д.) -- swc модуль
  • common -- swc модуль
  • module1 -- swc модуль
  • module2 -- swc модуль
  • app1 -- swf модуль
  • app2 -- swf модуль
  • server-side-module-1 -- java, fms, php и т.д.
  • server-side-module-2

Так вот, вся графика, шрифты, звуки и т.д. собраны в common-resources. Там же все css файлы. И все это добро компилируется в swc. Причем нужно скомпилировать так, чтобы все файлы ресурсов вошли в состав swc файла.

В форке Develar с этим проблем не было, ибо включить все файлы в swc было поведением по умолчанию и не требовало никаких настроек. В стандартном flexmojos не так, по умолчанию ничего не включается.

В документации упоминаются всякие includeFiles, includes и т.д., но все это нифига не работает. К счастью, работает опция includeStylesheets:


<includeStylesheets>
	<stylesheet>
		<name>Fonts.css</name>
		<path>${basedir}/src/main/flex/Fonts.css</path>
	</stylesheet>
	<stylesheet>
		<name>Main.css</name>
		<path>${basedir}/src/main/flex/Main.css</path>
	</stylesheet>
</includeStylesheets>

Она позволяет включить в swc файл Main.css и Fonts.css, а вместе с ними шрифты и графику, на которые они ссылаются. Уже хорошо. Но и тут ложка дегдя -- с CSS опять нелады.

Я бы хотел положить css файлы в папку css, а не в корень src. Но если так сделать, то получим ошибку компиляции:

Error: A file found in a source-path must have the same package structure 'css', as the definition's package, ''.

Типа, класс должен быть в пакете css, а не в дефолтном пакете. Так что приходится класть css в корень src.

В итоге проект собирается и работает как надо.

Послесловие

Со всем этим можно было бы мириться, если бы не проблема с интеграцией с IDEA. В flex-config.xml не указан главный класс модуля. Из-за этого не работает build, а run/debug работает только при указании Main Class. Запускать флэшку для отладки через html-обертку или через url нельзя.

В итоге я вернулся на форк Develar, который с некоторых пор тоже работает на maven 3. Но об этом в следующий раз.

Ну а для тех, кто юзает стандартный Flexmojos два линка:

Btw, мои проекты на github остались на стандартном flexmojos. Оттуда тоже можно брать примеры помов.

Btw, Владимир Кривошеев aka Develar нынче работает в JetBrains, так что мы ждем еще лучшей поддержки flexmojos (в том числе и стандартного) и Flex в IDEA.

Btw, проголосуйте за поддержку Mate фреймворка в IDEA :) Ну если, конечно, вы хотите, чтобы такая поддержка там была.

Comments

Генерация flex-config для стандартного flexmojos также поддерживается http://youtrack.jetbrains.net/issue/IDEA-61024 (хотя из коробки вы ничего не получите на данный момент).

Касательно warnings.noConstructor — синтаксис сейчас изменен на нечто типа

<compilerWarnings>
  <warn-no-constructor>false</warn-no-constructor>
</compilerWarnings>

Такой вопрос, здесь мы обсуждали возможность создания пользовательских констант в config-xml. Каким образом я могу внести аналогичные изменения в flex-config в том случае, когда я использую maven ?

Я пробовал создавать через тег но похоже где то сделал ошибку.

yzh44yzh's picture

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>${flexmojos.version}</version>
<extensions>true</extensions>

<configuration>

<definesDeclaration>
<property>
<name>COMPILER::BUILD_NUMBER</name>
<value>"${svn.build}"</value>
</property>
<property>
<name>COMPILER::RTMP_URI</name>
<value>"${chat7.fms.uri}"</value>
</property>

Юра, а ты так и не решил для себя вопрос с разделением ресурсов по отдельным папкам?

yzh44yzh's picture

решил, после того, как отказался от maven, и сделал все на ant )

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
question for bots )
Image CAPTCHA
Enter the characters shown in the image.