我希望那里有人可以提供帮助。
我有一个大型项目,它使用Ant进行发布版本,必须“在与工作区相同的JRE中运行” 这在fb4.5和4.6中一直很好,但在4.7 fb.exportReleaseBuild给我们一个java.lang.NullPointerException。
我可以在4.6中加载项目并立即构建它,但是因为你不能再获得4.6这不是一个长期的解决方案。
我可以通过执行以下操作在两台PC上重现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>
右键单击构建文件, 以 - &gt;运行Ant Build ... - &gt; JRE(标签) - &gt;选择“在与工作区相同的JRE中运行” - &gt;点击“运行”
如果你在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中打开相同的项目并观察它是否有效!!!
我希望有人可以提供帮助,这让我很生气。
非常感谢 丹
答案 0 :(得分:3)
不幸的是,在FlashBuilder 4.7中使用fb.exportReleaseBuild ant任务时,似乎无法解决NullPointerException。
我最近也遇到过这个问题,并决定破解fb.exportReleaseBuild的实现,最终直接调用执行&#34; Export Release Build&#34;的ExportReleaseVersionManager.java代码。 FlashBuilder Eclipse插件提供的功能。
如果查看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线程调用该方法,并且当您运行ant构建时,对workbench.getActiveWorkbenchWindow()的调用将始终返回null,这是非UI线程。
所以,显然,这不是回归测试,如前所述,并且可能无法修复它,除非当然有一个源代码,这将使其无法修复。
感谢Adobe!
答案 1 :(得分:0)
我知道你的帖子已经有一段时间了,但是昨天同样的问题打击了我 - 所以对于任何面对这个问题的人我记下了我的经历。我无法在FB 4.7中使用ant编译获取java.lang.NullPointerException。我认为RIAstars的评论是正确的,但是随着技术的终结,无论出于什么原因你仍然在使用Flex / Flash,你仍然需要一个解决方案;在这里,我看到了三种可能性:
在我的情况下,我使用fb.exportReleaseBuild失败,使其在我的模块化项目结构上运行。我创建了一个ant脚本,首先从我的项目中执行-dump-config(编译器选项)并从sourcemate生成一个ant脚本(为你做了大约50%的工作,并且在ant语法中有一个很好的介绍,但只能工作用FB 4.6 lol)。在这个基础上,我创建了我的ant构建文件,并通过研究和尝试和错误(我第一次使用ant)逐步修复错误。我使用cm和cmd行来创建我的发布版本。
嗯,非常烦人且耗时 - 做这样的发布版本,但至少它是有效的并且是自动化的。