【问题标题】:Flash Builder 4.7 Ant Build IssuesFlash Builder 4.7 Ant 构建问题
【发布时间】:2013-05-13 13:22:57
【问题描述】:

希望有人能帮忙。

我有一个使用 Ant 进行发布构建的大型项目,它必须是“在与工作区相同的 JRE 中运行” 这在 fb4.5 和 4.6 中一直很好,但在 4.7 中 fb.exportReleaseBuild 给了我们一个 java.lang.NullPointerException。

我现在可以在 4.6 中加载项目并构建它,但由于您无法再获得 4.6,这不是一个长期解决方案。

我可以通过执行以下操作在两台 PC 上重现 4.7 中的问题:

创建一个名为“buildTest”的新弹性项目, 添加构建文件夹, 创建一个名为 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>

右键单击构建文件, Run as -> Ant Build... -> JRE (tab) -> 选择“Run in the same JRE as the workspace” -> 点击“Run”

如果您在 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 中打开相同的项目并观察它的工作!!!

希望有人能帮忙,这让我发疯了。

非常感谢 丹

【问题讨论】:

  • "but as you can't get 4.6 any more this isn't a long term solution" > FlashBuilder 作为产品并不是一个长期的解决方案。我建议您切换到由尊重您的公司开发的 IDE。 Adobe 迟早会放弃 FlashBuilder 或至少放弃对 Flex 的支持。显然他们已经削减了回归测试的预算:不幸的是你的回归错误并不是唯一的:(
  • 我的情况更糟,我什至没有 4.6 或 4.5...

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


【解决方案1】:

不幸的是,在 FlashBuilder 4.7 中使用 fb.exportReleaseBuild ant 任务时似乎无法解决 NullPointerException。

我最近也遇到了这个问题,决定破解fb.exportReleaseBuild的实现,最终直接调用ExportReleaseVersionManager.java代码执行FlashBuilder Eclipse插件提供的“Export Release Build”功能.

如果您查看错误日志或启用足够的 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 线程。

因此,很明显,如前所述,这没有经过回归测试,并且可能无法修复它,除非当然有源代码,这将使修复变得非常简单。

感谢 Adob​​e!

【讨论】:

    【解决方案2】:

    我知道您的帖子是不久前发布的,但昨天同样的问题袭击了我 - 所以对于遇到此问题的其他人,我记下我的经历。我无法在 FB 4.7 中使用 ant 进行编译,得到 java.lang.NullPointerException。我认为 RIAstars 的评论是正确的,但是作为一项技术已经到了生命的尽头,并且无论出于何种原因您仍然喜欢 Flex/Flash,您仍然需要解决问题;在这里我看到了三种可能性:

    • 在您的机器上并排安装 FB 4.6 和 FB 4.7,并在 FB 4.6 中执行您的 ant 任务,同时在 FB 4.7 上进行开发
    • 尝试让你的build.xml从命令行运行在Ant内部(在windows上:下载ant,设置环境变量ANT_HOME和Path(追加)到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 大声笑)。在此基础上,我创建了我的 ant 构建文件,并通过研究和尝试和错误逐步修复错误(我第一次使用 ant)。我使用 ant 和 cmd 行来创建我的发布版本。

    好吧,所有这些都非常烦人且耗时 - 像这样进行发布构建,但至少它可以工作并且是自动化的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 2014-01-24
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      相关资源
      最近更新 更多