Проблемы с Flash Builder 4 и Flex Library проектом
October 15, 2009 – 1:15 pmUPD: баг пофиксили, испарвление будет в новой версии, УРА!
На днях пришла необходимость попробовать перенести библиотеки с flex sdk 3.2 на flex sdk 4. Заодно повтыкать в Flash Builder 4 и различные радости которые нам принес Gumbo.
Все было хорошо и ничто не предвещало беды ). После создания проекта компилятор сразу начал ругаться. “Почему бы и нет” – подумал я, ведь различия в сдк большие. Начал выяснять почему.
Первым сюрпризом было то, что он ругался на mxml класс, который обращался к AS классу лежащему в том же пакете. “Едить колотить, какая та лажа” – подумал я. И волевым движением руки добавил в mxml импорт, этого нужного класса.
Потом выяснилось, что такая же проблема еще с несколькими mxml. Ругая индусов я добавил импорт и в остальные классы. Вылез следующий такой же проблемный AS класс. Вставка импорта не помогла — данный класс бы internal. Скрипя душей и наплевав на хорошие манеры сделал класс public. Вылез следующий баг, mxml наследованный от mxml. И тут полностью приплыли, если навигатор нормально видет класс, нормально входит в него, то компилятор ругается.
Начал выдумывать почему такое происходит. Вариантов у меня было три:
- “Старый код”, В качестве базовых mxml классов используется mx:Canvas.
- Проблемы с неймспейсами.
- Я что то пропустил в этой жизни и изменился порядок создания библиотек.
Покапал в сторон “старых классов”, ничего! Нет никаких упоминаний о том что с ними, что-то нитак, поклацал галочки типа “Use Flex 3 compability”. Никаких результатов.
Поискал доки про изменения неймспейсов, плохого ничего не написано, никаких сложностей.
Библиотеки создаются стандартным образом, никаких шаманст ненужно.
Сделал тестовую библиотеку, неработает. Попробовал mxml без наследования, работает
но меня это не спасает, использование классов в том же пакете без импорта не работает.
Поспрашивал у народа в чате UAFPUG. Никто ничего незнает. Дима попробывал несколько предложить несколько способов (пол мороженного лежит на полочке, ждет
). Но они не повторяли мою проблему и не особо помогли. Затем Дима прислал пример с кукбук как создавать компоненты со своим неймспейсом. Повторил все операции описаные в статье, не работает! Ругается, что не может найти мой класс в моем неймспейсе. Почувствовал себя полным дебилом.
Одновременно со мной этой же проблемой занималась Татьяна Белоусова из команды Flexis. Она сказала, что если поставить опцию компилятора -keep-generated-actionscript то mxml классы генерятся и пачкой вываливаються в корень каталога generated, а имена пакетов пустые т.е. реально все mxml классы лежат в корневом пакете. после этого у меня осталось лишь 2 мысли, или я всетаки что то неправильно готовлю или это буг.
На bugs.adobe.com ничего похожего найти не смог (кошмар как сайт тормозит). Вернулся к варианту с неправильной готовкой.
Стянул проект с кукбука, запустил, все работает. Повторил снова все действия из кукбука, неработает. Проверил все настройки компилятора, неймспейсов — все совпадает, но не комплится. Копипастом перенес все в свой проект — неработает! К этому моменту я исчерпал практически весь запас ругательств. Попробовал убрать все описания кастомных неймспейсов, в настройке компилятора, библиотека с AS классом собралась. Добавил MXML — собралась, добавил наследника, естественно не собралась
.
Начал сравнивать вообще все галочки в примере и в моем проекте. Все одинакого. Перенес свои MXML в проект из кукбука, либа собралась, ни на что не ругалась, но и мои mxml не включила в проект. Полез в настройки библиотеки, пункт “Flex Library Build Path”, таб “Classes”, естетсвенно вновь появившиеся классы небыли включены в библиотеку, поставил галочки напротив них — либа нормально собралась, все классы сгенеренные из mxml разложились по нужным папочкам, package были розданы правильно. В этот момент, я почувствовал себя полным неудачником, ламером, человеком с погнутой кармой. Добавил еще несколько файлов, все отлично собирается и компилится. Затем еще пару, и тут мне надоело выставлять галочки напротив моих вновь созданых классов. И я подумал, какие клевые индусы, сделали такую офигенно-удобно-полезную переключалку “Include all classes from all sources path” (я еще в старых проектах не раз попадался когда вновь созданые классы не включались в либу) и я поспешил воспользоваться ей.
Всё. Всё перестало работать и вернулось на круги своя! Убрал галочку, все работает.
Убрал галочку протестил все мои нерабочие варианты, с наследованием mxml, с кастомными неймспейсами, с импортом. Всё работает.
Люди, вы понимаете, что это полная ЖОПА? Это полный маразм! Из-за левой, выставляемой по умолчанию, кажущейся мега удобной галочкой, которую не один здраво-ленивый человек не захочет просто так снимать (а если снимет, то только при важных обстоятельствах), я протрахался 2 дня! Я исчерпал все свои ругательства, заговоры, шаманства, волшебные слова и веру в людей. Если бы не пример. И если не случай(! просто неочевидное стечение обстоятельств), то я бы вообще ничего не собрал.

Не используйте пока эту опцию! Никогда, забудьте про нее или дождитесь релиза )
Поняв причину, я смог найти на bugs.adobe.com баги связаные с этой опцией (и я, как оказалось, повторил их все!). Подумав немного над возможной причиной я пришел к выводу, что все связано с неверной генерацией кода, так сказать первопричина. Поэтому я запостил баг FB-23453 в котором попытался описать первопричину.

3 Responses to “Проблемы с Flash Builder 4 и Flex Library проектом”
Спасибо, что описал все свои страдания и создал баг в Adobe JIRA.
Это действительно очень неприятный баг.
Отдаю свой голос, пиарю в твиттере.
By JabbyPanda on Oct 16, 2009
Кстати, у бага https://bugs.adobe.com/jira/browse/FB-23288 priority A, хм неужели со времен выпуска Flash Builder 4 Beta 1 он никому не встречался?
By JabbyPanda on Oct 16, 2009
ogo) ne smeshno dazhe.
v takih sluchajah mozhno esche probovat compilit cherez ant
By mzx on Oct 28, 2009