如何自动构建 Flex 组件库?

Posted

技术标签:

【中文标题】如何自动构建 Flex 组件库?【英文标题】:How can I automate the building of a Flex component library? 【发布时间】:2010-11-26 14:54:54 【问题描述】:

我想自动构建一个 flex 库项目,而不是当前进程,这涉及我们的一位开发人员在他的机器上编译它,然后我们签入生成的 .swc 文件。太恶心了。

我是从 Java 开发人员的角度来解决这个问题的,所以我很难掌握 Flex Builder 3 应用程序中提供的编译工具的窍门,但这是我已经拥有的:

    我创建了一个 ant 文件,可以正确加载 ant 任务库,因此可以执行 <mxmlc/><compc/> 任务。 我已经找到了我需要构建的源代码,并且知道我想要最终得到什么样的 .swc。

我想要的是一个相当于这些步骤的 ant 脚本:

    我们将项目中的所有源代码(actionscript 和 MXML)和资产构建到一个 swc 文件中。 library.swf 文件被提取并优化

到目前为止,我有这个:

<target name="compile-component" depends="init">
  <compc output="$DEPLOY_DIR/$SWC_NAME.swc">
    <source-path path-element="$FLEX_HOME/frameworks"/>
    <source-path path-element="$SRC_DIR"/>
  </compc>
</target>

但是,它不包含任何内容:

[compc] Loading configuration file /Applications/Adobe Flex Builder 3/sdks/3.2.0/frameworks/flex-config.xml
[compc] Adobe Compc (Flex Component Compiler)
[compc] Version 3.2.0 build 3958
[compc] Copyright (c) 2004-2007 Adobe Systems, Inc. All rights reserved.
[compc] 
[compc] Error: nothing was specified to be included in the library
[compc] 
[compc] Use 'compc -help' for information about using the command line.

看起来我需要枚举我想包含在库中的每个类,这……可笑。一定会有更好的办法。我该怎么做?

【问题讨论】:

据我所知,命令行 MXMLC 编译器一次只编译一个文件(如果我错了,那就太好了!)。对于具有各种.mxml 文件的应用程序,我们最终要做的是创建一个迭代每个.mxml 文件的Ant 目标(使用ant-contrib for 任务),并为每个文件运行mxmlc 任务依次归档。如果您愿意,我可以提供我们的&lt;target&gt; 代码,但是将一堆组件编译成单个 SWF 略有不同 【参考方案1】:

您可以执行以下操作...它从源路径中获取所有文件并将其转换为 compc 任务可以使用的格式。

<fileset id="project.test.dir.fileset" dir="$project.test.dir">
    <include name="**/*.as" />
    <include name="**/*.mxml" />
</fileset>
<property name="project.test.dir.fileset" refid="project.test.dir.fileset" />

<!-- Convert the test files into a compiler friendly format. -->
<pathconvert property="project.test.dir.path" pathsep=" " refid="project.test.dir.fileset">
    <compositemapper>
        <chainedmapper>
            <globmapper from="$project.test.dir/*" to="*" handledirsep="true" />
            <mapper type="package" from="*.as" to="*" />
        </chainedmapper>
        <chainedmapper>
            <globmapper from="$project.test.dir/*" to="*" handledirsep="true" />
            <mapper type="package" from="*.mxml" to="*" />
        </chainedmapper>
    </compositemapper>
</pathconvert>

<compc headless-server="true" default-frame-rate="$flex.default-frame-rate" debug="$flex.compiler.debug.mode" output="$build.swc.dir/$test.component.name.swc" include-classes="$project.test.dir.path" directory="false">
    <source-path path-element="$project.test.dir" />
    &dependencies;
</compc>

我们使用它来生成用于测试目的的 swcs。

【讨论】:

格雷戈,这太棒了。谢谢! 查看 Rick 的使用 include-sources 元素的答案。似乎是一个更优雅的解决方案。 由于我发现缺少 compc 的文档,我想提一下 元素也适用于 compc,就像 mxmlc 一样,并且可以用于针对现有的 swc 库进行编译,如果你的项目需要任何。有了这个小小的补充,这对我来说非常有用,谢谢!【参考方案2】:

您可以使用Maven。它是一个配置管理工具,而不仅仅是一个构建工具。它确实依赖于您的项目具有清单文件。

【讨论】:

你能提供一个具体的例子吗?理想的情况是与 FB4 集成以进行开发。【参考方案3】:

你很幸运,我刚刚解决了这个问题,正在寻找另一个问题的答案!

    <compc output="$basedir/mySwc.swc" locale="en_US">
        <source-path path-element="$basedir/src/main/flex"/>
        <include-sources dir="$basedir/src/main/flex" includes="*" />
        <load-config filename="$basedir/fb3config.xml" />
    </compc>

源路径是必要的,它可以告诉它在尝试解析各种引用时要查看的内容。 include-sources 告诉它要包括哪些源(显然在这种情况下是所有源)。 load-config 只是 Flex Builder 的 -dump-config 输出。

希望这会有所帮助!

【讨论】:

这会包括图片和 CSS 文件等资产吗? ... 结果是,它尝试包含图像/CSS 文件,但由于它们不是 AS/mxml 文件而失败。真是太棒了。

以上是关于如何自动构建 Flex 组件库?的主要内容,如果未能解决你的问题,请参考以下文章

自动构建部署

如何使用自动工具构建静态和共享库?

使用NewLife网络库构建可靠的自动售货机Socket服务端

自动化构建之bower

如何在 Azure DevOps 中自动触发构建拉取请求?

Gradle自动实现Android组件化模块构建