| « Диплом | Черный баг или большое разочарование » |
Некоторые особенности сборки Ant-ом Flex + AIR проекта на Windows & Linux
Опишу несколько моментов в сборке, которые могут быть вам интересны, если выполнено одно из условий:
- Собираете проект вне Flex Builder
- Проект собирается в двух версиях параллельно - Flex и AIR
- Один и тот же Ant билд-файл должен работать на Windows и Linux - например, чтобы автоматизировать сборку с помощью Bamboo, работающего обычно на Linux веб-сервере
Не претендую на best-practice.
Используйте .jar или скрипт версии приложений для сборки (mxmlc.jar, compc.jar)
Очевидно, что на Linux .exe и .bat не пойдут.
Есть еще вариант использовать скрипты, например mxmlc, однако мне кажется, что там могут быть проблемы с передачей параметров (не проверял). Мне кажется, надежней вызывать сразу компилятор без посредников, чтобы не иметь лишних источников багов.
На Linux mxmlc.jar почему-то не может найти flex-config.xml, если папка процесса не является ${flex.home}/frameworks (на Windows такой проблемы нет) - поэтому приходится везде указывать абсолютные пути:
- <java jar="${FLEX_HOME}/lib/mxmlc.jar" dir="${FLEX_HOME}/frameworks"
- fork="true" failonerror="${fail.on.module.error}" maxmemory="500m">
- <arg value="${basedir}/${module.name}.mxml"/>
- <arg value="-output=${module.output.dir}/${module.name}.swf"/>
- </java>
Подозреваю, что это можно пофиксить хитрым параметром +flexlib="$FLEX_HOME/frameworks” (см. bin/mxmlc)
Сборка AIR .swf
Можно вызвать скрипт amxmlc, а можно запустить тот же mxmlc.jar, но с параметром +configname=air. Однако учтите - этот параметр всегда должен идти первым, иначе компилятор не поймет.
Отсутствием этого параметра может быть вызвана ошибка:
Error: Unable to locate specified base class 'mx.core.Application'
Error: only one source is allowed in the filespec
Эту ошибку можно словить, если написать следующее:
- <condition property="additional.args" value="+configname=air" else="">
- <isset property="is.air"/>
- </condition>
- <java jar="${FLEX_HOME}/lib/mxmlc.jar" dir="${FLEX_HOME}/frameworks"
- fork="true" failonerror="true" maxmemory="500m">
- <arg value="${additional.args}"/>
- <arg value="${basedir}/${source.current}/${root.file}"/>
- <arg value="-output=${main.output.file}"/>
- </java>
Т.е. для Flex версии первый параметр будет пустой. Просто задайте в случае, если ${is.air} не задано что-нибудь очевидное, вроде else="-as3=true".
Error: unable to resolve ‘embed-image.png’ for transcoding
Эта ошибка может появиться на Linux-машине, в то время как на Windows все отлично собирается. Дело в том, что Windows не обращает внимания на case, поэтому вам придется синхронизировать написание имени файла в Embed-директиве и в файловой системе:
Embed-Image.PNG -> embed-image.png
SVN не поддерживает переименование файлов с отличием лишь в case-е. Поэтому придется сначала закоммитить удаление файла с неправильным именем, а потом закоммитить исправленный.
Пробелы на конце строк в properties-файлах
Будте внимательны и не ставьте пробелы на конце строк в properties-файлах. Если этот property станет именем файла, то у вас возникнет куча проблем, например файл нельзя будет удалить с помощью FileZilla с удаленной машины - сервер скажет вам 550 file not found - все из-за разной работы с пробелами на концах файлов.
Трекбек адрес этой записи
URL трекбека (щелкните правой кнопкой мыши и скопируйте ссылку)
1 Трекбек
По уже сложившейся традиции в последние дни уходящего года в первые дни нового года хочу подвести некоторые итоги по части того, что пол





