上一篇《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執行后要做的動作。
新聞熱點
疑難解答