14 November 2011
这是由三部分构成的关于Flex、Maven和 Flexmojos的系列教程的最后一篇文章。基于该系列教程的第一部分对Maven和 Flexmojos的简介,第二部分讨论了如何设置项目、寻找Dependency、定制Flexmojos、进行单元测试以及将附加项目添加到你的版本。本文将讨论Flash的编译和链接、dependency作用范围、RSL支持、WAR打包、版本配置(build profile)和ASDoc目标等。在你学习完本文之后,你应该了解你需要的所有工具,以便利用Maven和 Flexmojos管理你的企业项目。
注:我之前也曾提到本文还将讨论Nexus,这是一款由Sonatype推出的知识库管理软件。为了减小本教程的篇幅长度,我已经决定将Nexus相关内容放入该主题自己的文章(即将发布)。
在继续讨论如何创建功能完备的SWF和SWC之前,我们有必要快速重温一下Flash Platform 编译器和组件(compilers and artifacts)。
Flash Platform 具有两个主要的命令行编译器(Flex、AIR和 ActionScript 3 项目均使用这些编译器)。
mxmlc 是应用程序(SWF)编译器compc 是组件(SWC)编译器注: mxmlc编译器 和 compc编译器 通常具有相同的设置,但也有少数设置只能适用于其中一个编译器;如需了解更多详细信息,请参见相关文档。
编译器能够创建各种文件类型:
注:在Flash Builder中,当你将 SWC作为一个dependency添加到应用程序并且设置 RSL的链接时,IDE 将自动在SWC中将 library.swf 部署到你的 bin-debug 文件夹中以便执行运行时加载。
Flash Builder能够利用各种dependency为创建项目提供三种类型的链接(参见图1):
mxmlc 和 compc 的library-path选项。external-library-path 编译器选项。mxmlc 的 static-link-runtime-shared-libraries 对其进行禁用设置)。注: 在默认情形下,Flash Builder能够设置Flex Library项目 (SWC) 使用外部链接 (external linkage)以便提供 Flex框架dependency,以及设置 Flex Applications (SWF)使用RSL。 ActionScript 项目将使用该框架的较小子集,并且只使用合并链接(merged linkage)(因为RSL 支持功能是Flex SDK的一个组成部分)。 在默认情形下,所有链接到SWF的其它库均作为合并类型进行链接。
关于RSL的更多信息,参见Flex 4.5文档中的RSL简介(Introduction to RSLs) 。
你在 Maven 项目中列出的dependency本身也具有自己的dependency;这样的dependency被称为 transitive。当你在你的本地知识库中安装一个第三方的dependency时,Maven将为该组件创建一个POM,该组件将声明其 groupId、artifactId 和 version (GAV) 参数,以及相应的 packaging。 然而,如果你的dependency 是通过Maven POM创建的并且还包含其它一些dependency,那么你的项目也将通过传递依赖它们。
例如,flex-framework POM(为了方便可以使用Marvin Froeder 创建), 本身就是一个POM,当创建一个 Flex 项目时,你将利用它进行编译。它依赖另一个POM,该POM包含所有你期望在Flex项目中出现的SWC。 因此,你添加到项目中的每个dependency 均能够潜在地显著扩展dependency树。
你可以通过在项目级别上执行下列goal显示任何POM的dependency树。
mvn dependency:tree
为了防止在版本的各个阶段出现各种不必要的dependency,你可以限制dependency的作用范围(scope)。 这里,scope 是指与dependency相关的环境。 其中一个范例是单元测试dependency。 记得在第二部分,我在FlexUnit4中创建了dependency,并且我通过设置它的作用范围将它限制在单元测试编译阶段:
<dependency>
<groupId>com.adobe.flexunit</groupId>
<artifactId>flexunit</artifactId>
<version>4.1.0-8</version>
<type>swc</type>
<scope>test</scope>
</dependency>
对于Flex项目来说,只存在一个scope选项:test,它能够在版本中真正将dependency限制在一个阶段。你也可以指定theme,它允许你显式地声明该dependency 应该作为theme选项提供给mxmlc,但通常这是不必要的,因为Flexmojos能够从项目中推断出theme (典型的主题是Spark 或Halo)。
其余5个scope选项对应于各种框架链接,而Flex在SWF或SWC和其库dependency之间支持这些链接。 这5个链接是:
library-path 选项,这一技巧只在项目使用的类中进行编译。 这对应于Flash Builder中的Merged Into Code库链接选项。include-libraries 编译器选项。 它可以用于将各种dependency捆绑在一起(以一种完全与Maven不一样的方式)。external-library-path 编译器选项。例如,playerglobal.swc是作为external链接的,因为它存活于Flash Player插件的每次安装过程中。该scope等同于Flash Builder中的External链接。 它通常用于SWC,你也可能在runtime 模块(SWF)中需要它,以便根据已经绑定到应用程序SWF中的定义进行编译。runtime-shared-library-path 编译器选项和Flash Builder 的RSL选项(参见下面的更多信息)。与正常的scope一样,它们可以被添加到一个dependency中。 例如,如果你希望根据一个dependency编译你的库(SWC),并且希望已使用的类能够绑入(而不是SWC的默认设置external),则你可以使用 merged scope:
<packaging>swc</packaging>
. . .
<dependency>
<groupId>org.robotlegs</groupId>
<artifactId>robotlegs-framework</artifactId>
<version>1.5.1</version>
<type>swc</type>
<scope>merged</scope>
</dependency>
注:当使用merged、external、internal、rsl 或caching scope时,必须意识到Maven 不支持自定义scope,并且Flexmojos通常能够提供关于使用它们的警示。 使用直接dependency可能会忽略这些警示,因为Flexmojos将覆盖它们。 另一方面,传递dependency将无法渲染Flexmojos,因为Maven能够为它提供这些dependency并且忽略自定义scope。 同样地,当你的项目的一个dependency具有带有一个自定义scope的dependency时,你可能遇到意外的结局。 该解决方案将在你的项目中直接定义这些传递dependency,并且指定与你要求的链接相对应的scope。
在默认情形下,Flash Builder和 mxmlc 均在Flex框架中使用RSL链接。在Flexmojos中,你通常能够在SWF项目中包含 Flex 框架,如下所示:
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>flex-framework</artifactId>
<version>4.5.1.21328</version>
<type>pom</type>
</dependency>
在你进行上述操作之后,你已经有效地使用 merged scope(假定相应的打包工具是SWF)并且你将注意到生成的组件已经与其要求的Flex框架定义进行绑定。 如果你对GitHub中的我的首批几个范例项目中的任何一个项目进行编译,你将会注意到生成的SWF文件尺寸非常大。这是因为它已经绑入了所有使用的Flex组件和dependency。
如果你希望将 Flex 框架作为一组 RSL下载,那么你还需要多做一些工作。
首先,你需要列出每个 Flex框架dependency。通常,你可以使用上述的XML snippet 创建Flex框架的dependency。 flex-framework POM 依赖 common-framework POM,它能够分别地列出你需要的所有 Flex dependency,以及相应的源绑定(resource bundle)(*.rb.swc)。
从这些dependency中,你可以选取dependency的子集并且将scope设置为caching。 然而,由于Flex编译器的特性,RSL的顺序是最为重要的。因此,应该充分利用在Flash Builder 中显示的dependency的顺序(参见图2)。
根据上面的排序,你可以依次忽略 playerglobal.swc、authoringsupport.swc、flash-integration.swc 和 locale(如果你展开dependency旁边的details按钮,你将看到它们均没有 RSL 定义)。然后交叉引用 common-framework POM,以便获取你需要的 XML。
如需获取更多信息,参见 参见FrameworkRSLs project in GitHub。下面是框架SWZ dependency按照正确顺序排列的完整列表:
<properties><flex.sdk.version>4.5.1.21328</flex.sdk.version></properties>
. . .
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>framework</artifactId>
<version>${flex.sdk.version}</version>
<type>swc</type>
<scope>caching</scope>
</dependency>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>textLayout</artifactId>
<version>${flex.sdk.version}</version>
<type>swc</type>
<scope>caching</scope>
</dependency>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>spark</artifactId>
<version>${flex.sdk.version}</version>
<type>swc</type>
<scope>caching</scope>
</dependency>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>sparkskins</artifactId>
<version>${flex.sdk.version}</version>
<type>swc</type>
<scope>caching</scope>
</dependency>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>rpc</artifactId>
<version>${flex.sdk.version}</version>
<type>swc</type>
<scope>caching</scope>
</dependency>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>charts</artifactId>
<version>${flex.sdk.version}</version>
<type>swc</type>
<scope>caching</scope>
</dependency>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>spark_dmv</artifactId>
<version>${flex.sdk.version}</version>
<type>swc</type>
<scope>caching</scope>
</dependency>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>osmf</artifactId>
<version>${flex.sdk.version}</version>
<type>swc</type>
<scope>caching</scope>
</dependency>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>mx</artifactId>
<version>${flex.sdk.version}</version>
<type>swc</type>
<scope>caching</scope>
</dependency>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>advancedgrids</artifactId>
<version>${flex.sdk.version}</version>
<type>swc</type>
<scope>caching</scope>
</dependency>
<dependency>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>flex-framework</artifactId>
<version>${flex.sdk.version}</version>
<type>pom</type>
</dependency>
注:最终的 POM dependency 必须在 RSL之后定义。 根据第一个声明优先的前提,Maven可以使用dependency调停(mediation),因此将其放置于后面能够确保具有caching作用范围的dependency优先。
现在,当我创建项目时,Flexmojos 将根据使用率确定我的应用程序需要哪些 RSL。例如,下面是我的GitHub项目的输出结果:
[INFO] Required RSLs:
[INFO] /rsl/framework-4.5.1.21328.swz
[INFO] /rsl/spark-4.5.1.21328.swz
[INFO] /rsl/textLayout-4.5.1.21328.swz
注:在默认情形下,Flexmojos 使用下面 RSL 模型:rsls/{artifactId}-{version}.{extension}. 。 你可以通过 <rslUrls> 配置参数定制该模型。
现在,如果你试图仅仅使用这些dependency执行一个SWF文件,则你将看到Flash Player给出下列提示信息:
Error #2032: Stream Error. URL: file:///rsl/framework-4.5.1.21328.swz
当然,这是因为RSL本身没有与SWF一起部署。
那么这些dependency来自何方?实际上,我可以使用Flexmojos的WAR 打包功能,并且将它们复制到 WAR的目标中(我将在后面讨论这一话题)。 此外,我也可以引用Adobe的当前版本。我能够在Flash Builder中通过Properties对话框找到这些RSL和版本的精确URL,采用的方法是在Flex Application 项目中选中 Project> Properties然后再选中 Flex Build Path(参见图3)。
在Flash Builder中,你可以看到所有dependency使用相同的策略文件(policy file): http://fpdownload.adobe.com/pub/swz/crossdomain.xml。 然而,如果你仔细观察,你将注意到其中两个dependeny (osmf 和 textLayout 框架) 使用不同的版本和稍有不同的URL。
大多数 Flex framework dependency与下列 spark 范例相似:
http://fpdownload.adobe.com/pub/swz/flex/4.5.1.21328/spark_4.5.1.21328.swz本范例使用下列格式:
http://fpdownload.adobe.com/pub/{extension}/flex/${flex.sdk.version}/{artifactId}_{version}.{extension}然而,textLayout 具有不同的 URL 和版本,因此它具有如下要求:
http://fpdownload.adobe.com/pub/swz/tlf/2.0.0.232/textLayout_2.0.0.232.swz它使用下列格式:
http://fpdownload.adobe.com/pub/{extension}/tlf/${flex.tlf.version}/{artifactId}_${flex.tlf.version}.{extension}最后需要说明的是,因为版本变更,osmf 是一种混合体:
http://fpdownload.adobe.com/pub/swz/flex/4.5.1.21328/osmf_1.0.0.16316.swz它的格式为:
http://fpdownload.adobe.com/pub/{extension}/flex/${flex.sdk.version}/{artifactId}_${flex.osmf.version}.{extension}如果你添加下列 Flexmojos配置(与在GitHub 项目中的配置相同),那么你可以在target文件夹中直接运行SWF:
<properties>
<flex.sdk.version>4.5.1.21328</flex.sdk.version>
<flex.tlf.version>2.0.0.232</flex.tlf.version>
<flex.osmf.version>1.0.0.16316</flex.osmf.version>
</properties>
. . .
<configuration>
<policyFileUrls>
<!--- cross domain policy for each RSL entry -->
<url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</url>
<url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</url>
<url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</url>
</policyFileUrls>
<rslUrls>
<url>http://fpdownload.adobe.com/pub/{extension}/flex/${flex.sdk.version}/{artifactId}_{version}.{extension}</url>
<url>http://fpdownload.adobe.com/pub/{extension}/tlf/${flex.tlf.version}/{artifactId}_${flex.tlf.version}.{extension}</url>
<url>http://fpdownload.adobe.com/pub/{extension}/flex/${flex.sdk.version}/{artifactId}_${flex.osmf.version}.{extension}</url>
</rslUrls>
</configuration>
关于如何使用 RSL等框架的通用信息,参见Flex 4.5文档中的使用RSL框架。
Flexmojos 提供两种可供选择的编译和部署 Flex 模块的方法。如需了解关于这些机制的范例的更多信息, 参见FlexModules project in GitHub。
第一个方法很简单,它涉及使用 the compile-swf goal 中的modules 参数。
通常,它要求将我的所有Flex模块作为我的主应用程序SWF放置于一个相同的位置,并且将它们在一个POM中分别列出。
在该配置中,我可以添加下面参数:
<modules>
<module>
<sourceFile>MyModule.mxml</sourceFile>
<optimize>true</optimize>
<finalName>MyModule</finalName>
</module>
</modules>
注:该优化参数与 Flash Builder中对应的参数相同。 它能够确保在模块中不会重复加载应用程序的定义。
现在,当对应用程序进行编译时,相应的模块将与它一起编译,并且重新命名为易于使用的MyModule.swf,这样,我可以通过下列语句在我的应用程序中加载该模块:
<s:ModuleLoader url=”MyModule.swf” />
如需看到实际运行的程序,请参阅GitHub中的应用程序子项目 。
第二个选项需要的工作量稍大一些。然而,你能够更精确地定制相应的模块。此外,它还是一个更为Maven友好的方法,因为它遵循one-artifact-per-POM规则;而在前面的选项中使用的技巧没有遵循这一规则。
为了使用第二个选项,你只需利用SWF打包功能创建一个 POM 并且将 sourceFile 参数设置为module file即可,正如你对正常的应用程序进行的操作一样;例如:
<configuration>
<sourceFile>MyModule.mxml</sourceFile>
</configuration>
如需看到实际运行的程序,请参阅GitHub中的模块子项目。在我的范例中,我还设置了 finalName 参数,以便我知道如何在我的ModuleLoader类中寻找该模块(finalName 仅仅是target 文件夹中的组件名称,它不影响你的知识库中的组件名称)。
为每个Flex模块提供一个POM的优点是它能够让你定义模块和其每个dependency之间的细微差别,这是生产过程中的一个真实因素。你也许希望为一个模块单独提供一个特定的SWC dependency;通过使用这一技巧,你可以将它包含到该模块中并且可以防止其包含的内容进入到你的父应用程序。
为了能够编译该模块并且防止它绑定到应用程序中已经显示的dependency中(尽管它已经优化),你可以将该应用程序生成的链接报告用作一个dependency。 这一操作与通过 mxmlc 并且利用 load-externs 编译器选项编译该模块是相似的。
这一操作共有两个步骤。首先,你需要配置该应用程序,以便将链接报告添加到我们的知识库中。这可以通过下面设置实现:
<linkReportAttach>true</linkReportAttach>其次,该模块需要为该链接报告提供一个dependency,它能够使得Flexmojos启用load-externs mxmlc选项。因为该项目使用 POM继承(已经在第二部分讨论过该话题),我可以使用这些方便的项目变量;例如:
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>application</artifactId>
<version>${project.version}</version>
<type>xml</type>
<classifier>link-report</classifier>
</dependency>
现在,我们已经为该应用程序优化了相应的模块,其方式与我在Flash Builder已经启用该功能的情形下所进行的优化操作一样。
注:在实际操作中,你可能希望像应用程序本身一样将模块部署到相同的文件夹(或子文件夹)中。 WAR打包功能能够实现这一目的,关于更多相关信息,参见下面的附加功能。
Maven 能够提供配置文件支持功能以便帮助你处理你希望在一个POM中定制不同类型版本的场景。 配置文件使得你能够根据环境特性(environmental feature)、属性或文件存在(file existence)定制应用程序的执行方式。
如需了解 Flex 项目中的程序是如何运行的,参见 GitHub中的我的Profiles项目
最简单的配置文件只能够改变POM的属性。例如,在 Flex 4.1和 Flex 4.5之间切换将生成下面代码:
<profiles>
<profile>
<id>flex4.1</id>
<properties>
<flex.sdk.version>4.1.0.16076</flex.sdk.version>
</properties>
</profile>
<profile>
<id>flex4.5</id>
<properties>
<flex.sdk.version>4.5.1.21328</flex.sdk.version>
</properties>
</profile>
</profiles>
如果我希望与Flexmojos configuration保持更亲近一些关系,则我也能够实现这一操作。 考虑一下下面的Flexmojos代码coverage configuration:/p>
. . .
<configuration>
<coverage>true</coverage>
<coverageReportFormat>
<param>html</param>
</coverageReportFormat>
</configuration>
. . .
我能够利用配置文件覆盖上面代码(例如用于我的build服务器),而该配置文件将输出XML报告;例如:
<profile>
<id>xml-coverage</id>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<configuration>
<coverageReportFormat>
<param>xml</param>
</coverageReportFormat>
</configuration>
</plugin>
</plugins>
</build>
</profile>
在本例中,我必须复制该configuration,因为它在我的POM中出现,因此Flexmojos能够引用build / plugins / plugin。
注:coverageReportFormat 参数在 Flexmojos 插件文档中的类型是List,因此你需要在每个list条目中使用<param>。
下面列表以降序优先级的方式描述配置文件激活的各种方法:
–P 选项启用(或使用!禁用) 配置文件;例如: mvn clean install –P flex4.1,debug,!coverage<activeProfiles> 参数激活一组配置文件。例如,你可以利用一个属性值启用配置文件:
<profile>
<activation>
<property>
<name>flex.sdk.version</name>
<value>4.5.1.21328</value>
</property>
</activation>
. . .
</profile>
或者,你可以通过使用下列代码打开(或通过!关闭)Windows OS 来启用配置文件:
<activation>
<os>
<family>windows</family>
</os>
</activation>
你也可以通过打开(或利用 <missing> 关闭)文件来启用配置文件:
<activation>
<file>
<exists>/usr/local/bin/flashplayer</exists>
</file>
</activation>
注:Maven的当前版本(在编写本文时版本为3.0.3)不支持对一个配置文件的多次激活。
<activeByDefault>true</activeByDefault>在默认情形下启用它。请记住,任何在默认情形下启用的配置文件将在通过上面给出的任一其它技术激活任何配置文件时自动禁用。 因此,activeByDefault 最好尽量少用。
注:如果你希望看到应用哪些配置文件,你可以添加 help:active-profiles goal;例如:mvn clean install –P flex4.1 help:active-profiles
关于 Maven 配置文件的更多信息,请参见Apache Maven文档中的版本配置文件简介(Introduction to Build Profiles)。
文档、WAR包和自定义 RSL均能够通过Flexmojos生成。
Flexmojos可以配置用于在你的代码中输出ASDocs。 为了救活该功能,你只需运行:
mvn flexmojos:asdoc
此外,你还可以通过将该goal作为一个附加的goal添加到相应的版本,以便将它添加到默认的生命周期中。 (参见 GitHub 中我的 ASDoc 范例)。
<build>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>asdoc</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
这样,每次当你运行 mvn clean install l时,也将生成 ASDocs。 你也可以为自己创建一个启用该功能的配置文件。
关于goal的所有详细信息,参见 Flexmojos 插件文档中的 flexmojos:asdoc。
Flexmojos 也能够兼容WAR打包功能。 这意味着你可以将Flex 组件导入到 WAR 文件以便进行 web部署。 其中一个部分是 copy-flex-resources goal,它能够将各种SWF、locale和 RSL绑定到最终的 WAR文件中。
为了执行这一goal,你必须通过打包功能创建另一个作为 war 的Maven模块,将 copy-flex-resources goal添加到该插件中,并且将你希望包含的每个SWF的dependency添加到最终的WAR中。 为了将附加的goal与默认的生命周期绑定,我在 plugin 内部使用 <execution> 设置;例如:
<packaging>war</packaging>
. . .
<build>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>copy-flex-resources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.17</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>application</artifactId>
<version>${project.version}</version>
<type>swf</type>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>module</artifactId>
<version>${project.version}</version>
<type>swf</type>
</dependency>
</dependencies>
为了深入讨论整个项目,请参见 GitHub 中的 WAR 打包功能范例 ,特别是应该参见本 POM 。
注: 另外还有一个用于创建HTML wrapper的goal,但我个人在使用它之后得到的结果是喜忧参半。 关于wrapper goal的更多详细信息,请参见 Html Wrapper Mojo 中的相关注解。
此外,Flexmojos能够在你的项目中生成RSL。
第一步是在SWC中生成一个SWF。 为了在你的SWC库中创建 RSL,你只需将 create-rsl goal 添加到相应的execution中即可;例如:
<packaging>swc</packaging>
. . .
<build>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>create-rsl</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
(参见本POM中的完整范例)。
这将创建RSL所需的SWC和SWF,并且将它们安装到本地知识库中。.
此外,如果该dependency是你已经下载的第三方SWC,则你可以从该SWC中提取library.swf并且将其作为SWF安装在你的本地知识库中。
注: 在生产环境中,你应该尽可能地考虑使用经过优化的SWF。 这将涉及在SWF中运行Apparat 或类似的工具。
下一步是将该RSL dependency添加到你的项目中。 例如,内部dependency 和第三方dependency的代码格式应该如下所示:
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>library</artifactId>
<version>${project.version}</version>
<type>swc</type>
<scope>rsl</scope>
</dependency>
<dependency>
<groupId>org.robotlegs</groupId>
<artifactId>robotlegs-framework</artifactId>
<version>1.5.1</version>
<type>swc</type>
<scope>rsl</scope>
</dependency>
(参见本POM中的完整范例)。
注:即使你以最终的形式在该dependency中使用相应的SWC类型,该应用程序也将寻找SWF。 Flexmojos将为你实现上述操作。
你可以按照如下的形式指定在这些文件中进行RSL部署:
<configuration>
<rslUrls>
<rsl>rsl/{artifactId}-{version}.{extension}</rsl>
</rslUrls>
</configuration>
Flexmojos 知道如何利用 RSL dependency对该SWF进行编译,因此将会为你列出这些dependency:
[INFO] Required RSLs:
[INFO] rsl/library-1.0.0-SNAPSHOT.swf
[INFO] rsl/robotlegs-framework-1.5.1.swf
最后,如果你希望将它们与你的应用程序一起部署,则你可以使用带有 WAR打包功能的另一个Maven模块,并且利用 copy-flex-resources goal 来部署RSL(参见图4)。
现在你明白了吧–这是一个关于Flexmojos插件的Flex和Maven的详细指南。今后,你可以使用下面任何资源以便获取更多的帮助,其中包括与 AIR和ActionScript 3 项目相关的帮助资源。
请记住,能力越大、责任越大,而Maven具有强大的功能。 已经定义相应的规则以确保一切均尽可能地简单明了。 忽视这些规则将导致潜在的风险—如果代码没有产生期望的结果,你无法从Maven中获得更多帮助。 一定记住必须尽可能地保持你的configuration有条不紊。 而管理脚本的规则是简洁为上。
一旦你掌握Maven,则它将成为一款你乐于在你的工具箱中拥有的工具。 此外,在Adobe 已经宣布他们即将在Flex和 Flash Builder中支持Maven之后,它迟早将成为 Flash Platform 世界的一个组成部分。