新聞中心
Maven 插件
如果你的項(xiàng)目是基于maven構(gòu)建,那么在項(xiàng)目的pom文件中,經(jīng)常會(huì)看到這樣的配置

專(zhuān)業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來(lái)客戶(hù)和效益!成都創(chuàng)新互聯(lián)公司為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)負(fù)責(zé)任的成都網(wǎng)站制作公司!
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.8
1.8
UTF-8
在上面的代碼中,我們使用了插件maven-compiler-plugin,這個(gè)插件的作用是將編寫(xiě)的java代碼編譯成指定的版本與編碼的class文件。
Maven插件的組成
- goal
maven中的插件是有很多目標(biāo)(goal)組成的,開(kāi)發(fā)插件,實(shí)際上就是去編寫(xiě)插件中目標(biāo)的具體代碼。每個(gè)目標(biāo)對(duì)應(yīng)一個(gè)java類(lèi),這個(gè)類(lèi)在maven中叫做MOJO,maven提供了一個(gè)Mojo的接口,我們開(kāi)發(fā)插件也就是去實(shí)現(xiàn)這個(gè)接口
org.apache.maven.plugin.Mojo通過(guò)goal我們可以定義插件在maven哪個(gè)生命周期中執(zhí)行,比如上面的maven-compiler-plugin在compile階段執(zhí)行。
- configuration
插件執(zhí)行階段,我們可以通過(guò)配置定義各種參數(shù),這樣就能根據(jù)不同參數(shù)按需求執(zhí)行插件,比如上面的maven-compiler-plugin中,在configuration 下的配置
1.8
1.8
UTF-8
maven-compiler-plugin的配置信息中,source和target屬性指定了編譯的java版本,encoding屬性指定了編譯結(jié)果的編碼。
Maven插件的分類(lèi)
Maven插件分為兩種:
- 核心插件:Maven自帶的插件,如maven-compiler-plugin,maven-surefire-plugin等。
- 非核心插件:第三方開(kāi)發(fā)的插件,如sonar-maven-plugin,pmd-maven-plugin等。
插件的生命周期
Maven插件的生命周期分為三個(gè)階段:
- 初始化階段:在這個(gè)階段,Maven會(huì)將插件的配置信息加載到一個(gè)org.apache.maven.plugin.Plugin對(duì)象中,這個(gè)對(duì)象中包含了插件的配置信息,如插件的id,version,dependencies等。
- 執(zhí)行階段:在這個(gè)階段,Maven會(huì)調(diào)用插件的execute()方法,這個(gè)方法就是插件的核心,這個(gè)方法的執(zhí)行是有順序的,先執(zhí)行initialize()方法,然后執(zhí)行execute()方法
- 銷(xiāo)毀階段:在這個(gè)階段,Maven會(huì)調(diào)用插件的cleanup()方法,這個(gè)方法的執(zhí)行是無(wú)順序的,先執(zhí)行execute()方法,然后執(zhí)行cleanup()方法。
Maven插件的執(zhí)行
Maven插件的執(zhí)行分為兩種:
- 手動(dòng)執(zhí)行:在命令行中,使用mvn插件的id,如mvn compiler:compile,這個(gè)命令會(huì)先執(zhí)行插件的初始化階段,然后執(zhí)行插件的執(zhí)行階段,最后執(zhí)行插件的銷(xiāo)毀階段。
- 自動(dòng)執(zhí)行:在pom.xml文件中配置插件的執(zhí)行,如maven-compiler-plugin,這個(gè)配置會(huì)先執(zhí)行插件的初始化階段,然后執(zhí)行插件的執(zhí)行階段,最后執(zhí)行插件的銷(xiāo)銷(xiāo)毀階段。
比如基于idea時(shí),我們可以在Maven工具欄,通過(guò)Lifecycle菜單中,選擇相應(yīng)的生命周期函數(shù),然后點(diǎn)擊Run按鈕,即可執(zhí)行插件。比如插件配置的在compile階段執(zhí)行,那么配置在compile對(duì)應(yīng)的goal都會(huì)觸發(fā)。
同樣我們可以直接通過(guò)mvn命令調(diào)用插件,這樣插件就不需要依賴(lài)于maven的生命周期函數(shù)取執(zhí)行了。
// mvn groupId:artifactId:goal -Dprop=value
mvn com.sucls.blog:build-maven-plugin:printDate -Dname=XX如何寫(xiě)一個(gè)Maven插件?
下面通過(guò)一個(gè)簡(jiǎn)單的示例來(lái)演示如何寫(xiě)一個(gè)Maven插件。
- 創(chuàng)建一個(gè)maven項(xiàng)目
- 添加相關(guān)依賴(lài)
org.apache.maven
maven-plugin-api
${maven-plugin-api.version}
org.apache.maven.plugin-tools
maven-plugin-annotations
${maven-plugin-annotations.version}
provided
- 編寫(xiě)插件代碼
@Mojo(name = "printDate")
public class PrintDatePlugin extends AbstractMojo {
@Parameter(property = "name",defaultValue = "printDate")
private String name;
@Parameter(property = "description",defaultValue = "打印日期插件")
private String description;
@Parameter(property = "format",defaultValue = "yyyy-MM-dd HH:mm:ss")
private String format;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
Date date = new Date();
Log log = getLog();
log.info(StringUtils.repeat("=",20));
log.info(String.format("開(kāi)始執(zhí)行插件:%s", name));
log.info(String.format("插件信息:%s", description));
log.info(String.format("執(zhí)行插件:%s", DateFormatUtils.format(date,format)));
log.info(StringUtils.repeat("=",20));
}
}- 打包插件
// 執(zhí)行下面的命令 或者通過(guò) idea中maven工具欄的package直接打包
mvn clean package- 使用插件 創(chuàng)建一個(gè)新的項(xiàng)目,在pom.xml中添加插件的配置信息
com.sucls.blog
build-maven-plugin
${project.version}
print-date
compile
printDate
PD
yyyy-MM-dd
- 執(zhí)行插件
mvn clean complie觀察控制臺(tái)可以看到這樣的信息:
[INFO] --- build-maven-plugin:1.0-SNAPSHOT:printDate (print-date) @ build-maven-plugin ---
[INFO]
[INFO] ===============
[INFO] 開(kāi)始執(zhí)行插件:PD
[INFO] 插件信息:打印日期插件
[INFO] 執(zhí)行插件:2023-12-05
[INFO] ===============上面的示例中,主要做了下面的事情:
- 定義了一個(gè)打印日期的插件 也就是一個(gè)maven項(xiàng)目
- 為插件定義goal 一個(gè)goal也就是一個(gè)org.apache.maven.plugin.Mojo類(lèi),通過(guò)@Mojo注解,定義了插件的名稱(chēng)和goal,一個(gè)插件中可以包含多個(gè)goal,在配置時(shí)同樣可以對(duì)應(yīng)多個(gè)
- 為插件添加參數(shù) 在每一個(gè)Mojo中,通過(guò)@Parameter定義插件相關(guān)參數(shù),這樣在插件執(zhí)行階段即可通過(guò)參數(shù)完成對(duì)應(yīng)邏輯
- 在其他項(xiàng)目中引入插件 在pom文件中,像其他插件一樣通過(guò)groupId:artifactId:version引入自己定義的插件,配置maven的哪個(gè)生命周期階段執(zhí)行插件的goal,以及插件的參數(shù)。
- 使用插件 maven生命周期中,各個(gè)階段都會(huì)找到所關(guān)聯(lián)的插件并執(zhí)行。
結(jié)束語(yǔ)
通過(guò)maven插件,可以根據(jù)我們的項(xiàng)目,定義一些重復(fù),但耗時(shí)的編碼工作,通過(guò)插件的形式,可以自動(dòng)化完成這些工作,從而提高開(kāi)發(fā)效率。
網(wǎng)站題目:怎么寫(xiě)一個(gè)Maven插件來(lái)提升生產(chǎn)效率?
URL地址:http://m.fisionsoft.com.cn/article/cdgjhjs.html


咨詢(xún)
建站咨詢(xún)
