我希望有人能帮忙。
我有一个使用Ant进行版本构建的大型项目,它必须是"在与工作区相同的JRE中运行"这在fb4.5和4.6中一直很好,但在4.7中,fb.exportReleaseBuild给了我们一个java.lang.NullPointerException.
我可以在4.6中加载项目并暂时构建它,但由于你再也无法获得4.6,这不是一个长期的解决方案。
我可以在两台电脑上复制4.7中的问题,方法如下:
创建一个名为"buildTest"的新flex项目,添加生成文件夹,创建一个名为build.xml的新文件(在build文件夹中(在构建文件中放入以下内容:
<?xml version="1.0" encoding="utf-8"?> <project default="default" basedir="../"> <!-- target: default --> <target name="default"> <fb.exportReleaseBuild project="BuildTest"/> </target> </project>
右键单击构建文件,运行方式->Ant Build…->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中创建它并看着它失败,然后在4.6中打开相同的项目并看着它工作!!!
我希望有人能帮忙,这让我很生气。
非常感谢Dan
不幸的是,在FlashBuilder 4.7中使用fb.exportReleaseBuild ant任务时,似乎无法解决NullPointerException。
我最近也遇到了这个问题,并决定破解fb.exportReleaseBuild的实现,它最终直接调用ExportReleaseVersionManager.java代码,该代码执行FlashBuilderEclipse插件提供的"Export Release Build"功能。
如果您查看erorr日志或启用足够的ant输出,则报告的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 }
事实证明,如果方法是从非UI线程调用的,那么对workbench.getActiveWorkbenchWindow((的调用将始终返回null,而当您运行ant构建时,这是一个非UI线程。
因此,很明显,这并没有像前面所说的那样经过回归测试,而且很可能没有办法修复它,当然,除非有源代码,这将使修复变得微不足道。
感谢Adobe!
我知道你的帖子是不久前发布的,但昨天我遇到了同样的问题,所以对于其他面临这一问题的人,我记下了我的经历。我无法在FB 4.7中使用ant进行编译,得到java.lang.NullPointerException。我认为RIAstars的评论是正确的,但由于技术已经过时,无论出于何种原因,你仍然喜欢Flex/Flash,你仍然需要解决方案;在这里我看到了三种可能性:
- 在你的机器上并排安装FB 4.6和FB 4.7,并在FB 4.6中完成蚂蚁任务,同时在FB 4.7上进行开发
- 试着从命令行让你的build.xml在Ant内部运行(在windows上:下载Ant,将环境变量Ant_HOME和Path(append(设置为Ant的安装路径,并将sdks\4.11.0\Ant\lib\flexTasks.jar传递到Ant的lib文件夹,用命令行导航到build.xml文件夹,键入Ant并点击回车键(
- 尝试另一个IDE,周围有一些(例如,检查Flash Builder的快速替代方案(
在我的案例中,我未能使用fb.exportReleaseBuild使其在我的模块化项目结构上运行。我创建了一个蚂蚁脚本,首先从我的项目中进行-dump-config(编译器选项(,并从sourcemate中生成一个蚂蚁剧本(为你做了大约50%的工作,并很好地介绍了蚂蚁语法,但只适用于FB 4.6 lol(。在此基础上,我创建了我的ant构建文件,并通过研究和尝试错误(第一次使用ant(一步一步地修复了错误。我使用带有cmd行的ant来创建我的发布版本。
好吧,所有这些都非常烦人和耗时——做这样的发布构建,但至少它是有效的,并且是自动化的。