2

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

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

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

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

创建一个名为“buildTest”的新 flex 项目,添加一个构建文件夹,创建一个名为 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 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 中打开相同的项目并观察它的工作!!!

我希望有人能帮忙,这让我很生气。

非常感谢丹

4

2 回答 2

3

不幸的是,在 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 线程调用该方法,并且当您运行 ant 构建时,即是非 UI 线程,则对workbench.getActiveWorkbenchWindow()的调用将始终返回 null。

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

感谢土坯!

于 2014-09-18T15:43:06.583 回答
0

我知道你的帖子是不久前的,但昨​​天同样的问题袭击了我——所以对于其他面临这个问题的人,我记下我的经历。我无法在 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,周围有一些(例如检查Flash Builder 的快速替代方案

就我而言,我使用 fb.exportReleaseBuild 使其在我的模块化项目结构上运行失败。我创建了一个 ant 脚本,首先从我的项目中执行一个 -dump-config(编译器选项)并从 sourcemate 生成一个 ant 脚本(为您完成了大约 50% 的工作,并且对 ant 语法进行了很好的介绍,但仅适用FB 4.6 大声笑)。在此基础上,我创建了我的 ant 构建文件,并通过研究和尝试和错误逐步修复错误(我第一次使用 ant)。我使用 ant 和 cmd 行来创建我的发布版本。

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

于 2014-01-23T12:12:35.893 回答