Flash Builder 4.7 Ant构建问题

时间:2013-05-13 13:22:58

标签: flex ant flash-builder java flex4.7

我希望那里有人可以提供帮助。

我有一个大型项目,它使用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中打开相同的项目并观察它是否有效!!!

我希望有人可以提供帮助,这让我很生气。

非常感谢 丹

2 个答案:

答案 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 4.6和FB 4.7,并在FB 4.7上进行ant任务,而在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,周围有一些(例如检查Fast alternative to Flash Builder

在我的情况下,我使用fb.exportReleaseBuild失败,使其在我的模块化项目结构上运行。我创建了一个ant脚本,首先从我的项目中执行-dump-config(编译器选项)并从sourcemate生成一个ant脚本(为你做了大约50%的工作,并且在ant语法中有一个很好的介绍,但只能工作用FB 4.6 lol)。在这个基础上,我创建了我的ant构建文件,并通过研究和尝试和错误(我第一次使用ant)逐步修复错误。我使用cm和cmd行来创建我的发布版本。

嗯,非常烦人且耗时 - 做这样的发布版本,但至少它是有效的并且是自动化的。