Как я могу собрать свою библиотеку Flex из исходного кода в командной строке, чтобы я мог ее RSL? - PullRequest
3 голосов
/ 21 октября 2009

Что говорит вопрос: я хочу использовать compc (либо из командной строки, либо из ant) ​​для создания .swc из некоторого ActionScript и mxml-кода. Сейчас у меня есть команда:

# compile src to .swc
FLEX_HOME="${FLEX_HOME:?'FLEX_HOME must be set'}"
PROJECT_DIR=$(unset CDPATH; cd `dirname $0`/..; pwd)
COMPC="${FLEX_HOME}/bin/compc"

"$COMPC" \
 -source-path $PROJECT_DIR/src \
 -include-sources $PROJECT_DIR/src \
 -compiler.library-path "$FLEX_HOME/frameworks/libs" "$PROJECT_DIR/libs" "$HOME/projects/advanis/flex_libs/libs" \
 -output $PROJECT_DIR/bin/myLibrary.swc

Однако, когда я строю с использованием этого, файл .swc catalog.xml имеет, помимо классов в $ PROJECT_DIR / src, файл .swc, содержащий классы из зависимых библиотек и из самой платформы. Я знаю , что это невозможно сделать, так как (например) библиотека Cairngorm зависит от объекта Flash-события, но этот объект нигде не находится в library.swf файле .swc, или я во всяком случае, уверен в этом.

Если это поможет, вот мой полный сценарий, и, возможно, кто-то может сказать мне, почему я поступаю неправильно:

У меня есть проект приложения Flash Builder 4 Flash, который зависит от:

  • SDK v3.4.1
  • FlexUnit 4, который у меня есть в виде пары файлов .swc и который я хотел бы представить в RSL:
    • FlexUnit4_1.0.swc
    • flexunitextended.swc
  • Cairngorm 2.2.1, как SWC, который я бы хотел RSL
  • mock-as3, который у меня есть только как источник, и который я хотел бы собрать, используя приведенные выше инструкции для создания полезной библиотеки
  • hamcrest-as3, который у меня есть как в исходном, так и в двоичном виде, и который я хотел бы собрать, используя приведенные выше инструкции для создания полезной библиотеки

Когда я настраиваю библиотеки FlexUnit, Cairngorm, mock-as3 и hamcrest-as3 в качестве библиотек RSL, когда для местоположения .swf установлено что-то существующее, я получаю ошибку времени выполнения:

VerifyError: Error #1014: Class IMXMLObject could not be found.

Это может быть следствием порядка библиотек, дополнительного дерьма, встроенного в библиотеку mock-as3, или чего-то еще. SWF-файлы RSL оптимизируются, если это имеет значение, с помощью этой команды:

optimizer -keep-as3-metadata="Bindable,Managed,ChangeEvent,NonCommittingChangeEvent,Transient" \
    -input library.swf \
    -output $swf_file

В любом случае, это немного разбросано, но суть в следующем: как же я собираю сторонние файлы .swc, сторонние файлы .swf, сторонние исходные пакеты и мой проект в рабочее приложение?

1 Ответ

2 голосов
/ 25 октября 2009

Параметр «compiler.library-path» вызывает привязку этих библиотек к выходному SWF / SWC. Чтобы не связывать библиотеки, используйте вместо этого параметр «compiler.external-library-path». Но затем убедитесь, что зависимости связаны с вашим конечным SWF-файлом приложения или загружены другим способом (например, RSL).

...