龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Maven Goal !

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
上一篇《maven的POM结构》让人晦涩难懂,一看就是拷贝粘贴的,很没意思。忽然想起了《maven的安装使用》,估计看完总有个问题,那个maven genapp里面genapp是怎么回事?你怎么知道后面跟

  上一篇《maven的POM结构》让人晦涩难懂,一看就是拷贝粘贴的,很没意思。忽然想起了《maven的安装使用》,估计看完总有个问题,那个maven genapp里面genapp是怎么回事?你怎么知道后面跟genapp,而不是genBush,genBullshit?先看看maven都支持什么命令行参数,输入maven -h,我们可以看到有一行如下:
   -g,--goals         Display available goals
  我们如法炮制,输入maven -g。救命啊,屏幕发了疯的滚屏,一气输出了725行,(假如对这些输出感爱好,建议你把它输出到文件中仔细观摩,使用命令“maven -g>文件路径”输出到目标文件,然后使用文本编辑器打开就可以了)但是这些输出都是什么呀?

  我们看看前八行的输出
  1  __  __
  2   /  __ _Apache__ ___
  3 / / _` V / -_) '   ~ intelligent projects ~
  4 _  _\__,_\_/\_____  v. 1.0
  5
  6 Available [Plugins] / Goals
  7 ===========================
  8   genapp  ......................... Generate Application based on a template
  9   ...  ...

  原来这个genapp是一个叫做goal的东西,不是“进球”的意思。指的是maven能够执行的任务,虽然名字听起来很有噱头,其实跟Ant里面的Task差不多,而且maven的goal定义里面也可以使用Ant里面的Task定义,就是诸如delete,mkdir,echo之类的Ant的Task,maven也可以照单全收,直接使用。从刚才maven -g我们可以看到maven支持如此众多的goal,也就是说已经替我们定制了一大堆门类齐全的goal供我们使用,甚至包括对JBuilder,Eclipse这样IDE的支持,可以生成它们特定的工程格式。所以maven支持的参数除了预定义的(可以用-h查看)还有就是定义好的goal。
  
  这些goal的定义都在maven的plugins目录里面,我们看到一大堆名字怪诞的jar文件,我们随便
  找一个撬开一看,里面一般的文件结构如下:

  --<META-INF>
  --plugin.jelly
  --plugin.properties
  --project.properties
  --project.XML
  --...

  其实四个文件里面,只有plugin.jelly和project.xml是必须具备的,最后的省略号是说有的plugin里面还要有相关支持类包或者资源包,资源包通常叫做plugin-resources。这个jelly是Apache的一个项目(怎么又冒出来一个?),不过我们就把它当作普通的xml文件看待就可以了,除非要自制插件,否则很少接触。

  有了这么强大的支持,就像编程有了强大丰富的库支持一样,我们可以省心省力了,但是假如我们觉得这些还不够用,或者我们要加点小花样怎么办?

  首先要想到的就是----对了,去网上找,找符合要求的插件,SourceForge网站上还专门有一个的 Maven插件的项目,还有maven的主页的插件列表,都是提供插件资源的地方。
  
  假如还是找不到,那就要考虑扩展已有的goal或者自定义goal。在工程文件夹定义一个文件maven.xml,这个文件是专门用来自定义goal的,所以一般工程可以没有这个文件。

  文件大致框架如下:

        <project xmlns:j="jelly:core">
          ...
          <goal name=...>
            ...
          </goal>
          ...
          <preGoal name=...>
            ...
          </preGoal>

          <postGoal name=...>
            ...
          </postGoal>

        </project>

  注重:文件头部不用<?xml version="1.0" encoding="ISO-8859-1"?>这样的声明。

  <goal>标签是用来自定义goal的,扩展goal用<preGoal>和<postGoal>标签,从名字上就可以看出来,<preGoal>要定义 <preGoal name=...>中的name指定的goal在执行前要做的动作。而<postGoal>则是定义相应goal执行后要做的动作。
  
  

精彩图集

赞助商链接