當maven內置的功能不能知足需求的時候怎麼辦?那隻能給它寫插件了。 java
網絡上不少maven的文章,但基本不多談及如何給它寫插件,即便你搜索maven plugin,也只是給你返回一堆如何使用maven插件的文章。但願這邊文章能給一些maven使用者帶來幫助。我在這裏先假設你已經懂得使用maven,我不會貼出完整的pom.xml文件 apache
首先,你須要建立一個maven項目,插件是一種特殊的maven項目
而後修改pom.xml,將packaging改成maven-plugin api
<packaging>maven-plugin</packaging>
經過properties定義maven的版本 網絡
<properties> <maven.version>2.2.1</maven.version> </properties>
maven3已經出了好久,而且兼容maven2,可是我這裏編寫插件使用的是maven2,能夠同時在maven2和maven3下使用,不過其實這個緣由並不重要,真正的緣由是由於maven3的代碼實在太爛了,最初的時候我用maven3的api lib來寫,發現裏面不少代碼根本沒有註釋,並且不少代碼已經廢棄,可是並無明確說明究竟用什麼方法代替。最後我使用了maven2中被maven3廢棄的api來完成個人功能,跑的挺好的,就是有時可能會有一些使用準備廢棄的api的提醒而已。 eclipse
接着添加依賴 maven
<dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-plugin-api</artifactId> <version>${maven.version}</version> </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId> <version>${maven.version}</version> </dependency> </dependencies>
而後開始建立Mojo類,maven插件裏面每個具體的功能都是一個Mojo
好比說eclipse:clean和eclipse:eclipse就是兩個Mojo 測試
/** * @goal helloWorld */ public class HelloWorldMojo extends AbstractMojo { public void execute() throws MojoExecutionException { getLog().info("Hello, world!"); } }
首先繼承AbstractMojo,而且實現execute()方法,這個就是每次調用進入的地方
而後須要在類的Javadoc上定義,這是一個annotation出來以前經常使用的定義方法(或許將來maven會將它改爲annotation,那就能提供編譯校驗和IDE校驗)。咱們必須定義@goal,表明運行目標,簡單來講就是eclipse:clean中的clean
Mojo寫在哪一個package底下都是能夠的 ui
這樣,咱們就完成了一個簡單的maven plugin,而後咱們須要一個簡單的測試來肯定他正確運行
先經過maven install將它安裝到本地倉庫 spa
而後打開任意maven的項目(好比說咱們原來已經在用maven的項目),在pom.xml增長一個plugin .net
<build> <plugins> <plugin> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <version>xxx</version> <executions> <execution> <phase>compile</phase> <goals> <goal>helloWorld</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
須要留意的是phase部分,咱們將這個plugin綁定到compile這個週期
而後咱們運行mvn compile,就能成功看見Hello, world!輸出
(固然你也能夠直接經過命令行運行,須要帶上完整的groupId和artifactId才能調用)
http://blog.csdn.net/bluishglc/article/details/6632280