放弃:我对flash构建过程比较陌生,因此部分/全部可能是错误的废话。请随意建议替代方法。
我们目前正在开发一个flex web应用程序,我们的构建情况远非理想。目前我们(如在个人开发人员中)只是使用FlashBuilder构建并手动部署。程序员目前正在尖叫血腥谋杀有两个原因:
- 缺乏CI就像回到石器时代
- 我们不太关心FlashBuilder
(注意:我们只使用FlashBuilder,因为这是设置flex项目的最简单方法 Away3D中 并使其正确构建/渲染 - 这是一个权宜之计解决方案)。
作为一个主要的.NET开发商店,我们习惯于持续集成以及持续部署。理想情况下,我们希望为我们的Flash项目提供与此类似的功能,而不必将自己与特定的IDE联系起来。
要求:
构建过程必须是:
- ..通过命令行运行
- ..在开发人员和CI构建机器上运行(当然不需要IDE!)
- ..最好尽可能独立于IDE(虽然实用主义会起作用;如果这会引起很多摩擦,我们只会选择一个)。
- ..能够在Windows上运行(我们使用Windows开发)
我们不介意重复或一些手动步骤(例如,如果我们通过IDE添加新项目,或者如果存在工具则从另一个配置生成一个配置),但不需要重复/维护更好。
我已经阅读了不少文章/博客文章,并观看了一些简短的截屏视频,但大多数都是关于构建系统如何与IDE一起构建的非常薄弱的。大多数文章/截屏视频具有相同的公式:如何使用单个文件和文本编辑器(无IDE)创建“Hello World”构建。
我也没有看到过多个库/项目等的主题。
在阅读了一段时间后,我正在考虑调查以下选项:
有没有人对上述解决方案(或其他我不知道的解决方案)有任何经验,如果有的话,你对它们有什么看法?任何帮助/指针赞赏。
我最近开始建设 摇篮 和 GradleFx 插件和我立即爱上它的力量和易用性。
Gradle是ANT + Maven + Ivy的演变,主要用于命令行。您可以:
- 写脚本 Groovy的 (一种在Java虚拟机中运行的类似Ruby的强大语言)
- 访问所有 现有 Maven和常春藤 资料库 以及你自己的回购
- 使用 现有的ANT任务
- 整合 CI (在Jenkins中,您只需勾选一个复选框以激活Gradle支持)
- 虽然它最初是从Java / Groovy社区发展而来的,但实际上它已经存在 语言不可知论者。您可以添加特定于语言的插件以添加功能。 GradleFx就是这样一个插件,它为您提供了额外的ActionScript / Flex构建任务。
- 做起来容易 多项目 建立。例如您可以编译,单元测试,打包和部署.NET服务层和Flex客户端应用程序 只用一个命令。
- 使用 约定优于配置:如果您遵守约定,您的构建脚本将非常简洁
- 生成各种报告:单元测试,检查方式,codenarc,...
- 生成Eclipse,IDEA或其他IDE项目
- 我尚未发现的所有东西
最重要的是:它非常容易学习。在开始使用Gradle之前,我对Maven一无所知,可以通过一些自定义工作来快速完成多项目构建。
编辑 (与Buildr AS3和Maven比较)
我只能将其与您提到的项目之一进行比较: Buildr AS3。它似乎始于一种类似于Gradle的哲学。 但 大约半年前我试过使用它,甚至无法使用简单的“Hello World”应用程序。我通过电子邮件向开发人员寻求帮助:没有回复。
与GradleFx相比:我与开发人员进行了一次小型的论坛讨论(关于一个相当哲学的话题,因为我并不需要任何帮助,因为它刚刚起作用)。他在几分钟内回答。
至于 Maven的:(对于它的价值)我只浏览了一些配置,当我将它们与Gradle脚本进行比较时,它们似乎过于复杂。
Maven做的一件事是你不能用GradleFx做的。它可以 从Maven仓库中提取正确的Flex SDK 与此相反。使用GradleFx,您必须在本地使用SDK。
我非常熟悉使用maven作为主要构建工具和Sonatype的flexmojos插件。我的经验与flexmojos有点过山车。 Maven是完全可靠的,它一直有效,没有问题,唯一的问题是flexmojos插件,它在版本之间波动很大。如果你选择走这条路线,请确保获取flexmojos的源代码,这样你就可以看到你的配置选项实际上对命令行参数等做了什么。对于Flex 3.x flexmojos 3.x高达3.9左右是好的和有效的关于生成.project eclipse文件的目标很好,相信还有一个mojo(maven插件)用于生成IntelliJ IDEA项目文件以及其他文件。如果您正在使用Flex 4,您可以使用最新的flexmojos 4.0RC2进行编译,但在我看来,生成flex / flashbuilder项目属性的目标现已消失(我不确定这是否因为它已被其他插件替换)完全或交易是什么)。然而,使用maven和flexmojos构建确实实现了上述所有目标(我们也使用它来构建我们的服务层,因此在单个mvn干净安装中,我们得到一个装在耳中的jar,包含所有配置和swf,那部分非常好)。您还可以使用bamboo进行持续集成(或者只是编写自己的脚本,这些脚本是从cron作业触发的,或者在Windows中作为使用计划任务执行的批处理文件,如果您没有* nix服务器)。如果您想了解更多细节,或者我错过了什么重大内容,请告诉我。
肖恩
我现在一直在使用哈德森 詹金斯,与 蚂蚁 用于Flex自动构建和 的FlexUnit 测试。 Jenkins有一些非常有用的插件可以与eclipse(以及FDT或FlashBuilder),Jira,SVN,Git等集成,而且它是免费的。此外,您可以将Ant构建集成到 Maven的 脚本,所以我发现这是一个很好的,灵活的解决方案,用于我迄今为止遇到的所有目的。
Flex SDK附带 Ant任务编写甚至精心制作的Ant构建脚本非常简单 - 实际上,我以前一直在本地使用Ant,而且我可以重用现有的脚本,只需为FlexUnit任务添加一些额外的编译器选项。
然而,它需要一段时间 正确设置系统 对于单元测试,因为我在Linux上运行无头服务器,这意味着ActionScript测试的环境相当复杂,因为它们只在Flash Player中运行。当然,这是真的 所有 使用FlexUnit的CI方案,无论您使用哪个服务器。
这是我学到的:
FlexUnit需要安装Flash Player的独立调试版,但Adobe仅在Linux上为标准版本分发二进制文件。因此,从源代码编译是必要的,并且由于我的服务器系统被剥离为必需品,因此需要花费一些精力来安装所有正确的依赖项并使它们工作。
Flash Player需要硬件才能正常运行:它使用图形,因此需要显卡和声音,因此需要声卡。在我的无头服务器上,这意味着我必须安装一个VNC主机才能让它运行,我不得不使用声音消除任何测试(这些测试现在只能在本地机器上运行)。如果有人遇到过我可以与VNC客户端一起使用的openSuSE工作声卡模拟 - 你将永远成为我的英雄!
如果您在单元测试中设置了异步超时,并且/或者您需要使用 setTimeout()
发送延迟的过程调用,确保间隔不是太短 - 我在任何本地机器上运行良好的测试都有问题,但是在CI服务器上破坏了构建,因为VNC上的Flash Player速度相当慢客户端比实际显卡。
我还发现最后一个问题是一个健康的教训:单元测试的标准不应该基于对系统性能的假设,或者至少要足够容忍即使在慢速机器上也能成功。