Flash Builder 4.7 Проблемы со сборкой Ant
Я надеюсь, что кто-то там может помочь.
У меня есть большой проект, который использует Ant для сборок релиза, который должен быть "Выполнен в той же JRE, что и рабочая область". Это всегда было хорошо в fb4.5 и 4.6, но в 4.7 fb.exportReleaseBuild дает нам исключение java.lang.NullPointerException.
Я могу просто загрузить проект в 4.6 и собрать его на данный момент, но, поскольку вы больше не можете получить 4.6, это не долгосрочное решение.
Я могу воспроизвести проблему в 4.7 на двух компьютерах, выполнив следующие действия:
Создайте новый проект Flex с именем "buildTest", добавьте папку сборки, создайте новый файл с именем build.xml (в папке сборки) Поместите в файл сборки следующее:
<?xml version="1.0" encoding="utf-8"?> <project default="default" basedir="../"> <!-- target: default --> <target name="default"> <fb.exportReleaseBuild project="BuildTest"/> </target> </project>
Щелкните правой кнопкой мыши по файлу сборки, "Запуск от имени" -> "Сборка Ant" -> JRE (вкладка) -> выберите "Выполнить в той же JRE, что и в рабочей области" -> нажмите "Выполнить"
Если вы делаете это в 4.6 (на любой из моих коробок), он работает нормально. если вы сделаете это в 4.7 (снова в любом поле), вы получите следующую ошибку:
Ошибка сборки C:\Users\germanD1\Documents\Projects\test Projects\Ant Test\BuildTest\build\build.xml:6: java.lang.NullPointerException
Вы даже можете создать его и посмотреть, как он выйдет из строя в 4.7, затем открыть тот же proj в 4.6 и посмотреть, как он работает!!!
Я надеюсь, что кто-то может помочь, это сводит меня с ума.
Большое спасибо Дэн
2 ответа
К сожалению, оказывается, что невозможно разрешить исключение NullPointerException при использовании задачи муравья fb.exportReleaseBuild в FlashBuilder 4.7.
Я также недавно столкнулся с этой проблемой и решил взломать реализацию fb.exportReleaseBuild, которая в конечном итоге вызывает непосредственно код ExportReleaseVersionManager.java, который выполняет функцию "Экспорт сборки выпуска", предоставляемую подключаемым модулем FlashBuilder Eclipse.
Если вы просматриваете журналы erorr или включаете достаточно вывода муравья, сообщается об исключении NullPointerException:
com.adobe.flexbuilder.exportimport.releaseversion.ExportReleaseVersionManager.doBuild (ExportReleaseVersionManager.java:222)
Если вы декомпилируете рассматриваемый файл, вы найдете причину ошибки:
220 if (PlatformUI.isWorkbenchRunning()) {
221 IWorkbench workbench = PlatformUI.getWorkbench();
222 IEditorPart[] dirtyEditors = workbench.getActiveWorkbenchWindow().getActivePage().getDirtyEditors();
223 assert (dirtyEditors.length == 0);
224 }
Оказывается, что вызов workbench.getActiveWorkbenchWindow() всегда будет возвращать null, если метод вызывается из потока, не являющегося пользовательским интерфейсом, и когда вы запускаете сборку ant, это поток, не являющийся пользовательским интерфейсом.
Итак, ясно, что это не было регрессионным тестированием, как уже говорилось ранее, и, скорее всего, нет способа его исправить, если, конечно, у человека не было исходного кода, который затем сделал бы его просто тривиальным для исправления.
спасибо Adobe!
Я знаю, что ваш пост был недавно, но вчера меня поразила та же проблема - поэтому для всех, кто сталкивается с этим, я записываю свой опыт. Я не смог скомпилировать с помощью ant в FB 4.7, получив исключение java.lang.NullPointerException. Я думаю, что комментарии RIAstars верны, но, поскольку технология является концом жизни, и вы по-прежнему пользуетесь Flex/Flash по какой-либо причине, вам все еще нужно обойтись; здесь я вижу три возможности:
- Установите FB 4.6 и FB 4.7 параллельно на своей машине и выполняйте задачи Ant в FB 4.6, пока вы разрабатываете на FB 4.7
- Попробуйте запустить свой build.xml внутри Ant из командной строки (в windows: загрузите ant, установите переменные среды ANT_HOME и Path (append) для пути установки ant, и передайте sdks\4.11.0\ant\lib\flexTasks.jar в папку lib ant, перейдите с помощью командной строки в папку build.xml, введите ant и нажмите enter).
- Попробуйте другую IDE, есть некоторые вокруг (например, отметьте Быстрая альтернатива Flash Builder)
В моем случае мне не удалось запустить fb.exportReleaseBuild для моей модульной структуры проекта. Я создал ant-скрипт, сначала выполнив -dump-config (опция компилятора) из моих проектов и сгенерировав ant-сценарий из sourcemate (выполняет для вас около 50% работы и хорошее введение в синтаксис ant, но работает только с FB 4,6 лол). На этой основе я создал свой файл сборки ant и шаг за шагом исправлял ошибки, проводя исследования, проб и ошибок (впервые использую ant). Я использую ant с строкой cmd для создания своих сборок релиза.
Что ж, все очень раздражает и отнимает много времени - делаю сборку релиза вот так, но, по крайней мере, она работает и автоматизирована.