掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
如果你的項目是基于maven構建,那么在項目的pom文件中,經(jīng)常會看到這樣的配置

專業(yè)成都網(wǎng)站建設公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!成都創(chuàng)新互聯(lián)公司為您提供成都網(wǎng)站建設,五站合一網(wǎng)站設計制作,服務好的網(wǎng)站設計公司,網(wǎng)站建設、成都網(wǎng)站設計負責任的成都網(wǎng)站制作公司!
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
1.8
1.8
UTF-8
在上面的代碼中,我們使用了插件maven-compiler-plugin,這個插件的作用是將編寫的java代碼編譯成指定的版本與編碼的class文件。
maven中的插件是有很多目標(goal)組成的,開發(fā)插件,實際上就是去編寫插件中目標的具體代碼。每個目標對應一個java類,這個類在maven中叫做MOJO,maven提供了一個Mojo的接口,我們開發(fā)插件也就是去實現(xiàn)這個接口
org.apache.maven.plugin.Mojo通過goal我們可以定義插件在maven哪個生命周期中執(zhí)行,比如上面的maven-compiler-plugin在compile階段執(zhí)行。
插件執(zhí)行階段,我們可以通過配置定義各種參數(shù),這樣就能根據(jù)不同參數(shù)按需求執(zhí)行插件,比如上面的maven-compiler-plugin中,在configuration 下的配置
1.8
1.8
UTF-8
maven-compiler-plugin的配置信息中,source和target屬性指定了編譯的java版本,encoding屬性指定了編譯結果的編碼。
Maven插件分為兩種:
Maven插件的生命周期分為三個階段:
Maven插件的執(zhí)行分為兩種:
比如基于idea時,我們可以在Maven工具欄,通過Lifecycle菜單中,選擇相應的生命周期函數(shù),然后點擊Run按鈕,即可執(zhí)行插件。比如插件配置的在compile階段執(zhí)行,那么配置在compile對應的goal都會觸發(fā)。
同樣我們可以直接通過mvn命令調(diào)用插件,這樣插件就不需要依賴于maven的生命周期函數(shù)取執(zhí)行了。
// mvn groupId:artifactId:goal -Dprop=value
mvn com.sucls.blog:build-maven-plugin:printDate -Dname=XX如何寫一個Maven插件?
下面通過一個簡單的示例來演示如何寫一個Maven插件。
org.apache.maven
maven-plugin-api
${maven-plugin-api.version}
org.apache.maven.plugin-tools
maven-plugin-annotations
${maven-plugin-annotations.version}
provided
@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("開始執(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í)行下面的命令 或者通過 idea中maven工具欄的package直接打包
mvn clean package
com.sucls.blog
build-maven-plugin
${project.version}
print-date
compile
printDate
PD
yyyy-MM-dd
mvn clean complie觀察控制臺可以看到這樣的信息:
[INFO] --- build-maven-plugin:1.0-SNAPSHOT:printDate (print-date) @ build-maven-plugin ---
[INFO]
[INFO] ===============
[INFO] 開始執(zhí)行插件:PD
[INFO] 插件信息:打印日期插件
[INFO] 執(zhí)行插件:2023-12-05
[INFO] ===============上面的示例中,主要做了下面的事情:
通過maven插件,可以根據(jù)我們的項目,定義一些重復,但耗時的編碼工作,通過插件的形式,可以自動化完成這些工作,從而提高開發(fā)效率。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流