Проблемы с 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