成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

怎么寫一個Maven插件來提升生產效率?

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

Maven 插件

如果你的項目是基于maven構建,那么在項目的pom文件中,經常會看到這樣的配置

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

在上面的代碼中,我們使用了插件maven-compiler-plugin,這個插件的作用是將編寫的java代碼編譯成指定的版本與編碼的class文件。

Maven插件的組成

  • goal

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

org.apache.maven.plugin.Mojo

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

  • configuration

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

<configuration>
    <source>1.8</source>
    <target>1.8</target>
    <encoding>UTF-8</encoding>
</configuration>

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

Maven插件的分類

Maven插件分為兩種:

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

插件的生命周期

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

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

Maven插件的執行

Maven插件的執行分為兩種:

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

比如基于idea時,我們可以在Maven工具欄,通過Lifecycle菜單中,選擇相應的生命周期函數,然后點擊Run按鈕,即可執行插件。比如插件配置的在compile階段執行,那么配置在compile對應的goal都會觸發。

同樣我們可以直接通過mvn命令調用插件,這樣插件就不需要依賴于maven的生命周期函數取執行了。

// mvn groupId:artifactId:goal -Dprop=value
mvn com.sucls.blog:build-maven-plugin:printDate -Dname=XX

如何寫一個Maven插件?

下面通過一個簡單的示例來演示如何寫一個Maven插件。

  1. 創建一個maven項目
  2. 添加相關依賴
<dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>${maven-plugin-api.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>${maven-plugin-annotations.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
  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("開始執行插件:%s", name));
        log.info(String.format("插件信息:%s", description));
        log.info(String.format("執行插件:%s", DateFormatUtils.format(date,format)));
        log.info(StringUtils.repeat("=",20));
    }
}
  1. 打包插件
// 執行下面的命令 或者通過 idea中maven工具欄的package直接打包
mvn clean package
  1. 使用插件 創建一個新的項目,在pom.xml中添加插件的配置信息
<build>
    <plugins>
      <plugin>
        <groupId>com.sucls.blog</groupId>
        <artifactId>build-maven-plugin</artifactId>
        <version>${project.version}</version>
        <executions>
          <execution>
            <id>print-date</id>
            <phase>compile</phase>
            <goals>
              <goal>printDate</goal>
            </goals>
            <configuration>
              <name>PD</name>
              <format>yyyy-MM-dd</format>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  1. 執行插件
mvn clean complie

觀察控制臺可以看到這樣的信息:

[INFO] --- build-maven-plugin:1.0-SNAPSHOT:printDate (print-date) @ build-maven-plugin ---
[INFO] 
[INFO] ===============
[INFO] 開始執行插件:PD
[INFO] 插件信息:打印日期插件
[INFO] 執行插件:2023-12-05
[INFO] ===============

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

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

結束語

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


責任編輯:武曉燕 來源: Java技術指北
相關推薦

2021-07-06 05:36:52

VS code插件編程

2023-04-30 23:09:50

2018-05-05 09:00:40

生產效率

2024-01-15 00:08:51

插件Code效率

2020-04-02 09:31:49

微前端架構系統

2014-04-03 10:46:12

Dockermaven

2010-09-13 19:23:02

網絡監控科盾

2010-09-14 23:00:08

生產效率網絡行為監控科盾

2018-02-24 12:08:52

Python開發技巧

2023-12-09 18:02:34

工具Code插件

2025-05-16 09:15:30

2018-01-19 22:36:23

idea插件編碼

2013-03-11 16:50:56

效率項目開發效率

2023-12-28 08:01:59

2022-05-30 14:33:55

MLOpsIDC人工智能

2024-12-31 00:00:00

VS Code插件工具開發者

2025-04-28 10:16:35

VSCode插件開發

2017-06-22 09:45:58

阿里云GN5實例深度學習

2025-06-03 08:55:00

JavaScriptelse編程

2022-01-19 16:13:20

戴爾
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人国产在线视频 | 欧美三级电影在线播放 | 成人免费网站 | 久久精品成人 | 国产成人精品一区二区三区 | 99久久精品免费看国产高清 | 亚洲午夜av久久乱码 | 久久久国产一区二区三区 | 久久国产精品亚洲 | 草草视频在线播放 | 成人高清在线 | 国产欧美精品区一区二区三区 | 国产精品1区2区 | 久久r免费视频 | 国产十日韩十欧美 | 国产主播第一页 | 在线视频中文字幕 | 久草网免费| 国产一区二 | 黄色网址大全在线观看 | 国产小视频在线 | 日韩羞羞 | 99久久久久久| 日本黄色免费片 | 久色网| 人人干人人干人人干 | 欧美成人一区二区三区 | 国产精华一区 | 亚洲一区二区三区在线视频 | 91社区在线观看 | 国产日韩一区二区 | 国产91综合 | 人人人人人爽 | 国产精品久久久久久久久久尿 | 欧美激情一区二区三区 | 九色 在线 | 欧美日韩综合视频 | 国产精品二区三区在线观看 | 日韩在线播放网址 | 国产精品久久久久久久久久 | 国产精品一区二区欧美黑人喷潮水 |