日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2023-12-13 17:02:52 265觀看
導讀Maven 插件如果你的項目是基于maven構建,那么在項目的pom文件中,經常會看到這樣的配置<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-c

Maven 插件

如果你的項目是基于maven構建,那么在項目的pom文件中,經常會看到這樣的配置76L28資訊網——每日最新資訊28at.com

<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文件。76L28資訊網——每日最新資訊28at.com

Maven插件的組成

  • goal

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

org.apache.maven.plugin.Mojo

通過goal我們可以定義插件在maven哪個生命周期中執行,比如上面的maven-compiler-plugin在compile階段執行。76L28資訊網——每日最新資訊28at.com

  • configuration

插件執行階段,我們可以通過配置定義各種參數,這樣就能根據不同參數按需求執行插件,比如上面的maven-compiler-plugin中,在configuration 下的配置76L28資訊網——每日最新資訊28at.com

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

maven-compiler-plugin的配置信息中,source和target屬性指定了編譯的java版本,encoding屬性指定了編譯結果的編碼。76L28資訊網——每日最新資訊28at.com

Maven插件的分類

Maven插件分為兩種:76L28資訊網——每日最新資訊28at.com

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

插件的生命周期

Maven插件的生命周期分為三個階段:76L28資訊網——每日最新資訊28at.com

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

Maven插件的執行

Maven插件的執行分為兩種:76L28資訊網——每日最新資訊28at.com

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

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

同樣我們可以直接通過mvn命令調用插件,這樣插件就不需要依賴于maven的生命周期函數取執行了。76L28資訊網——每日最新資訊28at.com

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

如何寫一個Maven插件?76L28資訊網——每日最新資訊28at.com

下面通過一個簡單的示例來演示如何寫一個Maven插件。76L28資訊網——每日最新資訊28at.com

  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

觀察控制臺可以看到這樣的信息:76L28資訊網——每日最新資訊28at.com

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

上面的示例中,主要做了下面的事情:76L28資訊網——每日最新資訊28at.com

  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插件,可以根據我們的項目,定義一些重復,但耗時的編碼工作,通過插件的形式,可以自動化完成這些工作,從而提高開發效率。76L28資訊網——每日最新資訊28at.com


76L28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-44413-0.html怎么寫一個Maven插件來提升生產效率?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 讓 Java 程序運行更快的 15 個技巧,肯定有你不知道的

下一篇: 手把手教你IDEA進行遠程Debug調試的來龍去脈

標簽:
  • 熱門焦點
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質感拉滿

    終于,在經過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網上出現了。還是博主數碼閑聊站曝光的,這次的外觀設計還是延續了一加11的方案,只是細節上有了調整,例如新加入了鈦空灰
  • 天貓精靈Sound Pro體驗:智能音箱沒有音質?來聽聽我的

    這幾年除了手機作為智能生活終端最主要的核心之外,第二個可以成為中心點的產品是什么?——是智能音箱。 手機在執行命令的時候有兩種操作方式,手和智能語音助手,而智能音箱只
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • 小米MIX Fold 3下月亮相:今年唯一無短板的全能折疊屏

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都有新的進展,其中榮耀、三星都已陸續發布了最新的折疊屏旗艦,尤其號榮耀Magi
  • 華為HarmonyOS 4升級計劃公布:首批34款機型今日開啟公測

    8月4日消息,今天下午華為正式發布了HarmonyOS 4系統,在更流暢的前提下,還帶來了不少新功能,UI設計也有變化,會讓手機煥然一新。華為宣布,首批機型將會在
  • iQOO 11S新品發布會

    iQOO將在7月4日19:00舉行新品發布會,推出杭州亞運會電競賽事官方用機iQOO 11S。
  • 由于成本持續增加,筆記本產品價格預計將明顯上漲

    根據知情人士透露,由于材料、物流等成本持續增加,筆記本產品價格預計將在2021年下半年有明顯上漲。進入6月下旬以來,全球半導體芯片缺貨情況加劇,顯卡、處理器
Top 主站蜘蛛池模板: 应城市| 兰溪市| 黎城县| 上虞市| 松滋市| 华容县| 洪雅县| 正安县| 惠来县| 万山特区| 临沧市| 桂阳县| 五台县| 阳泉市| 横山县| 万安县| 汉中市| 巨野县| 孝义市| 三门县| 和平县| 托克逊县| 梅河口市| 辽阳市| 额尔古纳市| 德格县| 永德县| 西昌市| 广饶县| 霞浦县| 海门市| 潼南县| 汉寿县| 奉化市| 塔河县| 德令哈市| 墨玉县| 铜鼓县| 兴宁市| 巩义市| 敦煌市|