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

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

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

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

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

  1. 我们将项目中的所有源代码(actionscript 和 MXML)和资产构建到一个 swc 文件中。
  2. 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 略有不同

标签: apache-flex ant flex3 adobe flexbuilder


【解决方案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 文件而失败。真是太棒了。
猜你喜欢
  • 2012-01-06
  • 2012-06-17
  • 2011-11-21
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2010-10-19
  • 2020-10-23
相关资源
最近更新 更多