在Flex项目中使用Maven(四)之FlexMojo

RIAMeeting在前面中3篇关于在Flex中使用Maven的文章中,我们对Maven进行了一下扫盲。这篇文章开始进入到Maven开发的实质性部分:使用flex-mojos插件来进行flex项目的开发。

flex-mojos 是一个Maven插件,他为我们提供了一系列maven 操作可以让我们方便的从源代码中编译出 SWC,SWF, AIR 的SWC以及AIR的SWF除此以外,所有你能够用Flex SDK进行的操作比如html wrapper的生成,RSL,Modules支持都可以做到。

另外,最方便的一点是,当你把项目整合到Maven中并且使用了flex-mojos之后,你可以不需要对项目做任何设置(包括在一个没有flex sdk的环境下)只通过一个命令,即可从源代码编译出你需要的目标文件。

下面,我们就一步一步将这个过程设置好:

按照前面的介绍,如果你已经设置好了Java和Maven环境。那么就可以开始使用flex-mojos了。首先我们先演示一下如何创建一个flex的应用程序项目:

mvn archetype:generate -DarchetypeRepository=http://repository.sonatype.org/content/groups/public -DarchetypeGroupId=org.sonatype.flexmojos -DarchetypeArtifactId=flexmojos-archetypes-application -DarchetypeVersion=3.3.0

这里简单解释一下这个mvn命令:

  1. archetype:generate 是maven的一个标准的生命周期中的一个,他的作用是创建一个新的项目。
  2. -DarchetypeRepository=http://repository.sonatype.org/content/groups/public  由于flex-mojos并不位于maven的默认公共仓库:http://repo1.maven.org/maven2/ , 因此这个参数是为了告诉maven去哪个公共仓库寻找flex-mojos的库。
  3. -DarchetypeGroupId=org.sonatype.flexmojos -DarchetypeArtifactId=flexmojos-archetypes-application -DarchetypeVersion=3.3.0  这三个参数我们放在一起说:groupid和archetypesid 以及 version 组合起来,构成maven系统中用来标识一个项目的绝对定位坐标。
    1. groupid(组名)就是我们一般情况下认为你的项目属于哪个分组,一般以公司域名来命名,比如 com.riameeting.flexmaven 这样子的group id表示这个项目是在riameeting下flexmaven组中的一个项目。这里,我们看到这个值是org.sonatype.flexmojos 这个值实际上意味着我们要使用的这个插件(flex-mojos)是在org.sonatype下flexmojos项目组的开发的众多插件中的一个。
    2. archetypeid(构件名) 实际上是这个项目自身的一个名字,这里其具体值是:flexmojos-archetypes-application 这个项目的名字其实告诉我们,他是flexmojos中用来创建 flex应用程序项目的插件。后面我们会看到,当你想创建flex的lib项目时,你使用的将会是另外一个 archetypeid
    3. version(版本号) 是显而易见的一个值,指明目前这个插件项目的版本。

在我们继续前,我需要说明一下,这里的flexmojos实际上是maven插件,maven中,你所使用的插件也是maven所支持的众多项目中的一个普通项目,因此,他的标识也是由maven中的组名,构件名,以及版本号来决定的。 后面我们会看到,由于我们这里需要创建一个flex的项目,由于你也想用maven管理它,因此,它也会有组名,构件名,以及版本号。

 

此操作的结果显示在这里:

注意,如果运行时,你看到更多的输出内容,完全是正常的,由于你是第一次运行这个maven 插件,maven会试图下载他所需要的插件类库,但是,下次你再运行类似任务的时候,这些内容就不会被再次下载了。

 这个操作过程是互动的,因为这里面需要获取关于这个项目的一些信息:

  1. 组名称 :
  2. 构件名称:
  3. 版本号码
  4. 程序中使用的包名,包名会默认从组名称中集成,如果你觉得这个组名作为包名没有问题,则可以什么都不输入,直接按回车。前请看浅蓝色的框,我们什么都没有输入,默认使用com.riameeting.flexmaven来做包名
  5. 最终有一个确认汇总你所输入的信息来让你确认,汇总部分,如果确认无误,则输入Y或者直接回车确认。否则,输入N重新输入你想要的内容。

 

通过这个操作,我们会创建一个目录结构,这个目录结构就是maven默认约定的目录,同时,还可以帮助你生成一个pom.xml的mvn配置文件。

 

这个目录结构中,在源代码目录中分为两个子目录:

main

test

main中的flex文件夹下是主要源代码

test中的flex文件夹下则是测试用例的源代码

 pom.xml则是这个项目的mvn配置文件。

 

这个时候,你也许会想,我现在虽然有了项目结构目录了,但是我如何使用FlexBuilder来写代码呢? 

由于Maven的默认repository里面并没有flexmojos插件的一些内容,我们现在需要告诉maven一个指定的公共仓库来获取他需要的内容。这个设置可以通过在maven的配置文件中设置。

打开这个pom.xml文件,添加如下内容到project标签中:

添加了这部分内容后(在这里下载添加完成后的pom文件  ),我们就可以进入到pom.xml所在的文件夹,使用

mvn flexmojos:flexbuilder

这个命令,这个命令是flexmojos这个插件中的一个命令,他的作用是为你生成flexbuilder所需的项目配置,以便于你可以把这个项目导入到flexbuilder中去。

 这个命令的执行时间会稍长,尤其是你的网络状况不太好的情况下,因为flex-mojos会将flex-sdk下载到maven的本地仓库中。

等这个命令运行完毕后,你就可以在flex builder中导入这个项目,并且开始在flex buider中编写代码了。

在本系列的下一篇文章中,riameeting会继续完善这个maven项目,为其加入svn的管理以及私有仓库的发布设置等。

 

 

 

 

 

 

riadevID: 
您给予的分值: None 平均分: 9 ( 4 票)

还有下一节吗?

好像还没有讲完,flex sdk一定要从网上重新下载的吗?每个flex开发者机器上都会有的。。。还要重新下载一遍啊,这不是自己找麻烦吗?

自动编译部分本来就

自动编译部分本来就不是为了在开发者机器上跑的,而是在linux环境下跑。
就算是在你自己环境下跑,下载flex sdk如果有公司私服的话,速度也是非常非常快的。

多谢楼主,我也折腾好了。

我尝试用了4.0.x的版本,基本弄通了。

遗留两个问题:
首先flashplayer的设定,使用系统PATH可以,使用mvn -DflashPlayer.command=... 也可以,
但用

  1. <configuration>
  2. <testRunner>
  3. <launcher>
  4. <flashplayerCommand>"D:\Adobe\Adobe Flash CS5\Players\Debug\FlashPlayerDebugger.exe"</flashplayerCommand>
  5. </launcher>
  6. </testRunner>
  7. ....

不行。不知道为什么。

第二就是编译打包(mvn install)很慢,空项目居然要38秒,不能接受这样的速度啊。

多谢楼主,我也折腾好了。

我尝试用了4.0.x的版本,基本弄通了。

遗留两个问题:
首先flashplayer的设定,使用系统PATH可以,使用mvn -DflashPlayer.command=... 也可以,
但用



"D:\Adobe\Adobe Flash CS5\Players\Debug\FlashPlayerDebugger.exe"


....

不行。不知道为什么。

第二就是编译打包(mvn install)很慢,空项目居然要38秒,不能接受这样的速度啊。

顶楼的哥们,这么好

顶楼的哥们,这么好的修改,建议提交flexmojo补丁啊!!!

准备再改一下让他支

准备再改一下让他支持多线程编译模块,flex编译实在是慢得受不了

上传jar包http://download.c

上传jar包http://download.csdn.net/source/1879817,我们自已有一个公用的仓库,放在公司内的公用仓库里共享的

报错了

运行mvn flexmojos:flexbuilder就会报
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'flexmojo'.
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] The plugin 'org.apache.maven.plugins:maven-flexmojo-plugin' does not exis
t or no valid version could be found
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
不知道为什么。。

我用的就是maven,flexmojos 对多模块支持不是很好,我自已改了一下

让flexmojos modulefiles支持通配符文件集,生成的模块SWF支持路径
http://blog.csdn.net/fidelhl/archive/2009/08/04/4406502.aspx

这个更新倒是很有用

这个更新倒是很有用处,不过,你那样修改,不太好部署吧。也许只能自己一个人用。要是在大家团队里面share,还有点问题。
看了flex mojos的许可证,是允许重新发布的。
你就直接重新打个包,只需要声明修改自flex mojo即可。这样,我们把你这个修改的版本直接install到自己的仓库中,修改plugin的依赖改成新发布的名称,大家就都能用了。

给打个包吧

发表新评论

  • 网页地址和电子邮件地址将会被自动转换为链接。
  • 行和段被自动切分。
  • 您可以使用下面的标签来高亮显示您的评论内容: <code>, <blockcode>. 可以使用"[foo]".旁边显示标签样式 "<foo>" PHP代码可以用这样的区块来包含<?php ... ?> or <% ... %>

更多格式化选项信息

验证区域
系统验证:请回答下面的问题