FlashCommand 0.9.0 с возможностью добавлять classpaths
В течение последней недели я тратил часть своего свободного времени на выработку технологии сборки flash-проектов, которая бы преследовала следующие цели:
- Она должна надежно собирать мой проект.
- Она должна по возможности быстро собирать мой проект.
- Она должна собирать мой проект легко и непринужденно на любой Windows-машине (при условии, конечно, что там будет установлено необходимое программное обеспечение).
- Эта методика не предназначена для опенсорсной flash-разработки.
В общем-то, неизвестных много, но много и известных. Безусловно, для сборки должен использоваться ANT. Это зарекомендовавший себя инструмент. К тому же он прост в использовании.
Быстроту мне обеспечит mtasc. Через задачу exec он легко интегрируется в ant'овский скрипт. Но обладает существенным недостатком: он не компилирует mx-классы. Поэтому мне не обойтись при компиляции начальной swf-ки, а также при изменении элементов дизайна приложения средой разработки Flash. Также я испытываю острую необходимость компилировать билды с помощью среды разработки Flash - скажем так для надежности (это все-таки поддерживаемая коммерческая среда). Но, скажем, ежедневные билды будут компилиться всего раз в день и, в общем-то, этот процесс может быть и продолжительным.
Ну вот, собственно, тут и начинается основная заморока: приложение в среде Flash трудно компилировать из командной строки. Есть ряд способов (сводящихся в основном к использованию jsfl), которые более-менее позволяют это делать, но у всех способов есть один существенный недостаток: пути к классам должны прописываться либо в среде Flash, либо во fla-файле. Это, по сути, напрочь убивает все преимущества компиляции из командной строки. И это служило основным камнем преткновения во всей замышляемой цепочке.
И тут возникает выбор: воспользоваться ANT Task'ами FlashAnt Арала Балкана или FDT (в котором тоже есть - fdt.flashCompile)? Это кроссплатформенные решения (а платформы всего две и в связи со спецификой России меня Маки не интересуют). Есть более простое решение.
И тут я вспомнил про старый добрый и, вроде, ничем не примечательный инструмент Майка Чамберса FlashCommand. Он бесплатен, с открытым исходным кодом, написан на C# под .Net. И сам Майк пишет, что его можно улучшать на здоровье:
Use at your own risk. The code is not documented well, and I haven't touched it in 6 months, but I wanted to make it available to anyone who wanted to work on it or improve it (and it could use a lot of improvements).
Ну вот я и улучшил. Версия Майка была 0.8.2. Теперь можно скачать версию 0.9.0.
Мною сделаны мелкие багфиксы, поддержка Flash 8 (при нормальной инсталляции последняя версия определяется и запускается автоматически, без указания путей), и, главное, возможность задавать classpaths в коммандной строке. Опять же, если Flash был нормально установлен и у вас на машине есть админские права, все должно работать. Задается classpath с помощью ключа -cp , за которым следуют пути к классам сплошняком через ;. Если в этой строке будут пробелы, то можно заключить ее (и остальные такие строки) в кавычки. Ниже приведу все доступные ключи:
Использование:
FlashCommand.exe -e | -c | -p [-q] [-v] [-x] [-q] (-s) ([-l] [ ]) ([-o] ) ([-f] ) ([-t] ) ([-cp] <"classpath1;classpath2;classpath3">)
-version : Выводит информацию о программе.
-help | Выводит информацию об использовании.
-e : Осуществляется экспорт приложения.
-c : Save and compact.
-p : Публикация клипа.
-l : Определяет файл, в который будет вывоится лог. Не обязательный. В дополнительном необязательном параметре путь к файлу лога. Если не определен, лог будет находиться в\log
-q : Тихий режим. Не обязательный. Если указан, вывод не будет производиться в консоль (но может производиться в лог).
-v : Подробный вывод.
-d : Задает каталог для временных файлов (не обязательный).
-s : Мсходный fla-файл. Лбязательный.
-o : Определяет выходной swf-файл если установлен флаг-e. Не обязательный. Если не указан, файл будет располагаться в одном каталоге с исходным.
-x : Если указан, среда разработки Flash будет закрыта после компиляции. Не обязательный.
-k : Если указан, временный jsfl-файл не будет удален. Не обязательный.
-f : Указывает путь к исполняемому файлу, запускающему Flash. Не обязательный.
-t : Задает таймаут. Не обязателен
-d : Задает временный каталог. Не обязателен.
-cp : Задает пути к классам. Можно указать несколько каталогов, разделяя их ";", а также заключить их все в кавычки если там содержатся пробелы. Не обязателен.
Для установки просто скопируйте в свой любимый каталог. Можно добавить каталог с программой к переменным окружения чтобы не задавать путь в ant-скрипте.
Пример мини-проекта с использованием ant можно скачать. Скрипт для ant довольно простой и на моей машине работает как часы:
<?xml version="1.0" encoding="UTF-8"?>
<!-- ======================================================================
15.01.2006 22:37:23
Cats
Тренируемся на кошках
Constantiner (constantiner gav-gav gmail dot com)
====================================================================== -->
<project name="Cats" default="flashCommandBuild" basedir="../">
<description>
Тренируемся на кошках
</description>
<property name="flashCommandExe" location="D:\Program Files\FlashCommand\FlashCommand.exe"/>
<property name="bin" location="bin/"/>
<property name="fla" location="fla/"/>
<property name="classpath1" location="src1/"/>
<property name="classpath2" location="src2/"/>
<property name="buildFile" location="${fla}/cats.fla"/>
<property name="outputFile" location="${bin}/cats.swf"/>
<property name="logDir" location="log/"/>
<property name="logFile" location="${logDir}/log.txt"/>
<!-- =================================
target: flashCommandBuild
================================= -->
<target name="flashCommandBuild" depends="clearBin" description="--> Тренируемся на кошках">
<exec executable="${flashCommandExe}">
<arg line="-e"/>
<arg line="-x"/>
<arg line="-s ${buildFile}"/>
<arg line="-l ${logFile}"/>
<arg line="-o ${outputFile}"/>
<arg line="-cp "${classpath1};${classpath2}""/>
</exec>
</target>
<!-- - - - - - - - - - - - - - - - - -
target: depends
- - - - - - - - - - - - - - - - - -->
<target name="clearBin">
<echo>Clear Output Dir...</echo>
<delete>
<fileset dir="${bin}"></fileset>
<fileset dir="${logDir}"></fileset>
</delete>
</target>
</project>
В общем, пользуйте на здоровье. Замечания, баги, пожелания - в комменты. Думаю, что в скором будущем выложу исходники.
UPD: Для работы приложения необходим .NET фрэймворк версии 2.0. Его можно скачать с сайта производителя. В Visual Studio 2005 я не очень еще разбираюсь. Вечерком попробую опубликовать под 1.1.
Комментариев 6:
You can use some HTML tags, such as
Нэ понял :)
Спасибо - тулза полезная. Но я честно говоря мало понял как все запускать- можно попоробнее описать процесс?
2pablo
Как обычный компилятор коммандной строки. Наподобие, например, mtasc. Или на каком шаге возникли проблемы? Может, .Net 2.0 не установлен?
Мой менеджер давно интересовался, можно ли как-то организовать полную сборку проекта из командной строки.. Сегодня у него день рождения, так что твоя статья как раз ложка к обеду :))
2fix
Смотри следующий пост. Там все слегка улучшено и теперь все супер.
Отправить комментарий
Вернуться на главную