如何自动构建 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
任务依次归档。如果您愿意,我可以提供我们的<target>
代码,但是将一堆组件编译成单个 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 组件库?的主要内容,如果未能解决你的问题,请参考以下文章