Maven插件

maven的生命周期時抽象的,這意味著生命周期本身不做任何實際的工作,實際的任務(wù)都交由插件來完成。每個構(gòu)建步驟都可以綁定一個或多個插件行為,而且maven為都多數(shù)構(gòu)建步驟編寫并綁定了默認(rèn)插件。例如針對編譯的插件maven-compiler-plugin,針對測試的插件maven-surefire-plugin等。用戶也可配置插件定制構(gòu)建行為,甚至自己編寫插件。

插件目標(biāo)

插件以獨立的構(gòu)件形式存在,maven會在需要的時候下載并使用插件。

每個插件往往能完成多個任務(wù)。例如maven-dependency-plugin,它能分析依賴來源,列出依賴樹等,這些功能聚集在一個插件里,每個功能就是一個插件目標(biāo)。

maven-dependency-plugin有十多個模板,上述功能分別對應(yīng)插件目標(biāo)為dependency:list、dependency:tree。這是通用寫法,冒號前面是插件前綴,冒號后面是插件目標(biāo)。

插件綁定

maven生命周期的階段與插件的目標(biāo)相互綁定,以完成某個具體的構(gòu)件任務(wù)。

內(nèi)置綁定

maven為一些主要的生命周期階段綁定了很多插件的目標(biāo)。

生命周期階段 插件目標(biāo)
pre-clean
clean maven-clean-plugin:clean
post-clean
-------------- --------------
pre-site
site maven-site-plugin:site
post-site
site-deploy maven-site-plugin:deploy

相對于clean和site生命周期來說,default生命周期與插件目標(biāo)的綁定關(guān)系就顯得復(fù)雜一些。default生命周期的階段是插件目標(biāo)的綁定關(guān)系由項目打包類型(jar、war、pom等)所決定。

常見的打包類型有jar、war、pom、maven-plugin、ear等,它們的default生命周期與插件目標(biāo)的綁定關(guān)系請閱讀官方文檔,也可以從maven的命令行輸出中看到項目構(gòu)建過程執(zhí)行了哪些插件目標(biāo)。

自定義綁定

一個常見的例子是創(chuàng)建項目的源碼jar包,內(nèi)置的插件綁定沒有涉及這一任務(wù),需要用戶自行配置。maven-source-plugin:jar-no-fork目標(biāo)可以幫助我們完成。

<!-- 構(gòu)建插件的基本配置 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <!-- 指定生命周期階段 -->
                    <phase>verify</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

有時候不通過phase元素配置生命周期階段,插件目標(biāo)也能綁定到生命周期中。是因為插件的目標(biāo)在編寫時就定義了默認(rèn)的綁定階段。

如果多個目標(biāo)綁定到同一階段,會按照這些插件聲明的先后順序執(zhí)行。

插件配置

用戶可以配置插件目標(biāo)的參數(shù),進(jìn)一步調(diào)整插件目標(biāo)所執(zhí)行的任務(wù)??梢酝ㄟ^命令行和pom配置等方式來配置這些參數(shù)。

獲取插件

基本上所有主要的maven插件都來自apache和codehaus。apache的更穩(wěn)定些。

插件倉庫

與依賴構(gòu)件一樣,插件構(gòu)件同樣基于坐標(biāo)存儲在maven倉庫中。

解析插件前綴

maven-clean-plugin可以簡寫為clean。maven-compiler-plugin可以簡寫為compiler。

插件前綴與groupId:artifactId是一一對應(yīng)的,這種匹配關(guān)系存儲在倉庫元數(shù)據(jù)中。這里的元數(shù)據(jù)為groupId/maven-metadata.xml,這個groupId是指插件倉庫對應(yīng)的groupId,如前文所述的apache(http://repo1.maven.org/maven2/org/apache/maven/plugins/)和codehaus(...)。也可以通過settings.xml讓maven檢查其他groupId上的插件倉庫元數(shù)據(jù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容