日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
怎么寫一個Maven插件來提升生產(chǎn)效率?

Maven 插件

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

專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!成都創(chuàng)新互聯(lián)公司為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計制作,服務(wù)好的網(wǎng)站設(shè)計公司,網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計負責任的成都網(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

maven中的插件是有很多目標(goal)組成的,開發(fā)插件,實際上就是去編寫插件中目標的具體代碼。每個目標對應(yīng)一個java類,這個類在maven中叫做MOJO,maven提供了一個Mojo的接口,我們開發(fā)插件也就是去實現(xiàn)這個接口

org.apache.maven.plugin.Mojo

通過goal我們可以定義插件在maven哪個生命周期中執(zhí)行,比如上面的maven-compiler-plugin在compile階段執(zhí)行。

  • configuration

插件執(zhí)行階段,我們可以通過配置定義各種參數(shù),這樣就能根據(jù)不同參數(shù)按需求執(zhí)行插件,比如上面的maven-compiler-plugin中,在configuration 下的配置


    1.8
    1.8
    UTF-8

maven-compiler-plugin的配置信息中,source和target屬性指定了編譯的java版本,encoding屬性指定了編譯結(jié)果的編碼。

Maven插件的分類

Maven插件分為兩種:

  • 核心插件:Maven自帶的插件,如maven-compiler-plugin,maven-surefire-plugin等。
  • 非核心插件:第三方開發(fā)的插件,如sonar-maven-plugin,pmd-maven-plugin等。

插件的生命周期

Maven插件的生命周期分為三個階段:

  • 初始化階段:在這個階段,Maven會將插件的配置信息加載到一個org.apache.maven.plugin.Plugin對象中,這個對象中包含了插件的配置信息,如插件的id,version,dependencies等。
  • 執(zhí)行階段:在這個階段,Maven會調(diào)用插件的execute()方法,這個方法就是插件的核心,這個方法的執(zhí)行是有順序的,先執(zhí)行initialize()方法,然后執(zhí)行execute()方法
  • 銷毀階段:在這個階段,Maven會調(diào)用插件的cleanup()方法,這個方法的執(zhí)行是無順序的,先執(zhí)行execute()方法,然后執(zhí)行cleanup()方法。

Maven插件的執(zhí)行

Maven插件的執(zhí)行分為兩種:

  • 手動執(zhí)行:在命令行中,使用mvn插件的id,如mvn compiler:compile,這個命令會先執(zhí)行插件的初始化階段,然后執(zhí)行插件的執(zhí)行階段,最后執(zhí)行插件的銷毀階段。
  • 自動執(zhí)行:在pom.xml文件中配置插件的執(zhí)行,如maven-compiler-plugin,這個配置會先執(zhí)行插件的初始化階段,然后執(zhí)行插件的執(zhí)行階段,最后執(zhí)行插件的銷銷毀階段。

比如基于idea時,我們可以在Maven工具欄,通過Lifecycle菜單中,選擇相應(yīng)的生命周期函數(shù),然后點擊Run按鈕,即可執(zhí)行插件。比如插件配置的在compile階段執(zhí)行,那么配置在compile對應(yīng)的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插件。

  1. 創(chuàng)建一個maven項目
  2. 添加相關(guān)依賴

        
            org.apache.maven
            maven-plugin-api
            ${maven-plugin-api.version}
        
        
            org.apache.maven.plugin-tools
            maven-plugin-annotations
            ${maven-plugin-annotations.version}
            provided
        
    
  1. 編寫插件代碼
@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));
    }
}
  1. 打包插件
// 執(zhí)行下面的命令 或者通過 idea中maven工具欄的package直接打包
mvn clean package
  1. 使用插件 創(chuàng)建一個新的項目,在pom.xml中添加插件的配置信息

    
      
        com.sucls.blog
        build-maven-plugin
        ${project.version}
        
          
            print-date
            compile
            
              printDate
            
            
              PD
              yyyy-MM-dd
            
          
        
      
    
  
  1. 執(zhí)行插件
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] ===============

上面的示例中,主要做了下面的事情:

  1. 定義了一個打印日期的插件 也就是一個maven項目
  2. 為插件定義goal 一個goal也就是一個org.apache.maven.plugin.Mojo類,通過@Mojo注解,定義了插件的名稱和goal,一個插件中可以包含多個goal,在配置時同樣可以對應(yīng)多個
  3. 為插件添加參數(shù) 在每一個Mojo中,通過@Parameter定義插件相關(guān)參數(shù),這樣在插件執(zhí)行階段即可通過參數(shù)完成對應(yīng)邏輯
  4. 在其他項目中引入插件 在pom文件中,像其他插件一樣通過groupId:artifactId:version引入自己定義的插件,配置maven的哪個生命周期階段執(zhí)行插件的goal,以及插件的參數(shù)。
  5. 使用插件 maven生命周期中,各個階段都會找到所關(guān)聯(lián)的插件并執(zhí)行。

結(jié)束語

通過maven插件,可以根據(jù)我們的項目,定義一些重復(fù),但耗時的編碼工作,通過插件的形式,可以自動化完成這些工作,從而提高開發(fā)效率。


文章名稱:怎么寫一個Maven插件來提升生產(chǎn)效率?
網(wǎng)頁網(wǎng)址:http://www.5511xx.com/article/cdgjhjs.html