大家好,我是冰河~~
今天,冰河給大家分享一篇大部分人都不會的技能,那就是我們自己動手寫一款屬于自己的Maven插件,好了,直接進入今天的主題吧,
Maven插件的相關概念
插件坐標定位
插件與普通jar包一樣包含坐標定位屬性即:groupId、artifactId、version,當使用該插件時會從本地倉庫中搜索,如果沒有則從遠程倉庫下載,例如下面的配置所示,
<!-- 唯一定位到dependency 插件 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
execution配置
execution 配置包含一組指示插件如何執行的屬性:
- id : 執行器命名
- phase:標識執行的階段
- goals:標識執行的目標或功能
- configuration:標識執行目標所需的組態檔
插件的配置和使用示例
將插件依賴拷貝到指定目錄,
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
<excludeTransitive>true</excludeTransitive>
</configuration>
</execution>
</executions>
</plugin>
常用插件的使用
通過命令執行插件語法
除了通過配置的方式使用插件以外,Maven也提供了通過命令直接呼叫插件目標其命令格式如下所示,
mvn groupId:artifactId:version:goal -D{引數名}
通過命令執行插件示例
(2)展示pom的依賴關系樹
mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:tree
(3)直接簡化版的命令,但前提必須是maven 官方插件
mvn dependency:tree
其它常用插件
(1)查看pom 檔案的最終配置
mvn help:effective-pom
(2)原型專案生成
archetype:generate
(3)快速創建一個Web程式
mvn archetype:generate -DgroupId=io.mykit.web -DartifactId=mykit-maven-web -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
(4)快速創建一個Java專案
mvn archetype:generate -DgroupId=io.mykit.java -DartifactId=mykit-maven-java -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
自定義Maven插件
這里,我們先來說說自定義Maven插件的步驟,這里,我將自定義Maven插件的步驟總結如下,
(1)創建maven 插件專案
(2)設定packaging 為maven-plugin
(3)添加插件依賴
(4)撰寫插件實作邏輯
(5)打包構建插件
接下來,我們就來實作自定義Maven插件,
配置插件專案的pom.xml
這里,我直接跳過了Maven專案的創建,相信小伙伴們都會創建Maven專案,這里,我就不再贅述了,直接給出pom.xml檔案的配置,如下所示,
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.mykit.plugin</groupId>
<version>1.0.0-SNAPSHOT</version>
<artifactId>mykit-maven-plugin</artifactId>
<packaging>maven-plugin</packaging>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8 </source>
<target>1.8 </target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Maven插件的實作類
接下來,我們來撰寫Maven插件的實作類,這里,我直接給出類的源代碼,如下所示,
package io.mykit.plugin;
import javafx.beans.DefaultProperty;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
/**
* @author binghe
* @description 自定義Maven插件
*/
@Mojo(name = "binghe")
public class MykitMavenPlugin extends AbstractMojo {
private final Logger logger = LoggerFactory.getLogger(MykitMavenPlugin.class);
@Parameter(property="sex")
String sex;
@Parameter(property="describe")
String describe;
public void execute() throws MojoExecutionException, MojoFailureException {
logger.info(String.format("binghe sex=%s describe=%s",sex,describe));
}
}
打包安裝插件
將自定義的Maven插件打包并安裝到本地Maven倉庫,如下所示,
- 打包
mvn clean package
- 安裝到本地倉庫
mvn clean install
其他專案中參考自定義插件
如果需要在其他專案中使用我們自定義的Maven插件,則只需要創建一個Maven專案,在Maven專案的pom.xml檔案中引入如下配置即可,
<build>
<plugins>
<plugin>
<!--引入剛剛的插件依賴-->
<groupId>io.mykit.plugin</groupId>
<version>1.0.0-SNAPSHOT</version>
<artifactId>mykit-maven-plugin</artifactId>
<!-- 這里加入的是相關引數,這些引數必須跟插件實作里面的屬性保持一致 -->
<configuration>
<sex>男</sex>
<describe>冰河技術微信公眾號作者</describe>
</configuration>
</plugin>
</plugins>
</build>
寫在最后
如果你想進大廠,想升職加薪,或者對自己現有的作業比較迷茫,都可以私信我交流,希望我的一些經歷能夠幫助到大家~~
推薦閱讀:
- 《實踐出真知:全網最強秒殺系統架構解密,不是所有的秒殺都是秒殺!!》
- 《從零到上億用戶,我是如何一步步優化MySQL資料庫的?(建議收藏)》
- 《我用多執行緒進一步優化了億級流量電商業務下的海量資料校對系統,性能再次提升了200%!!(全程干貨,建議收藏)》
- 《我用多執行緒優化了億級流量電商業務下的海量資料校對系統,性能直接提升了200%!!(全程干貨,建議收藏)》
- 《我用10張圖總結出了這份并發編程最佳學習路線!!(建議收藏)》
- 《高并發場景下一種比讀寫鎖更快的鎖,看完我徹底折服了!!(建議收藏)》
- 《全網最全性能優化總結!!(冰河吐血整理,建議收藏)》
- 《三天擼完了MyBatis,各位隨便問!!(冰河吐血整理,建議收藏)》
- 《奉勸那些剛參加作業的學弟學妹們:要想進大廠,這些并發編程知識是你必須要掌握的!完整學習路線!!(建議收藏)》
- 《奉勸那些剛參加作業的學弟學妹們:要想進大廠,這些核心技能是你必須要掌握的!完整學習路線!!(建議收藏)》
- 《奉勸那些剛參加作業的學弟學妹們:這些計算機與作業系統基礎知識越早知道越好!萬字長文太頂了!!(建議收藏)》
- 《我用三天時間開發了一款老少皆宜的國民級游戲,支持播放音樂,現開放完整源代碼和注釋(建議收藏)!!》
- 《我是全網最硬核的高并發編程作者,CSDN最值得關注的博主,大家同意嗎?(建議收藏)》
- 《畢業五年,從月薪3000到年薪百萬,我掌握了哪些核心技能?(建議收藏)》
- 《我入侵了隔壁妹子的Wifi,發現,,,(全程實戰干貨,建議收藏)》
- 《千萬不要輕易嘗試“熊貓燒香”,這不,我后悔了!》
- 《清明節偷偷訓練“熊貓燒香”,結果我的電腦為熊貓“獻身了”!》
- 《7.3萬字肝爆Java8新特性,我不信你能看完!(建議收藏)》
- 《在業務高峰期拔掉服務器電源是一種怎樣的體驗?》
- 《全網最全Linux命令總結!!(史上最全,建議收藏)》
- 《用Python寫了個工具,完美破解了MySQL!!(建議收藏)》
- 《SimpleDateFormat類到底為啥不是執行緒安全的?(附六種解決方案,建議收藏)》
- 《MySQL 8中新增的這三大索引,直接讓MySQL起飛了,你竟然還不知道!!(建議收藏)》
- 《擼完Spring原始碼,我開源了這個分布式快取框架!!(建議收藏)》
- 《億級流量高并發秒殺系統商品“超賣”了,只因使用的JDK同步容器中存在這兩個巨大的坑!!(踩坑實錄,建議收藏)》
- 《奉勸那些剛參加作業的學弟學妹們:要想學好并發編程,這些并發容器的坑是你必須要注意的!!(建議收藏)》
- 《公司的報表工具太難用,我三天擼了個Excel工具,運營小姐姐直呼太好用了,現已開源!!(建議收藏)》
- 《奉勸那些剛參加作業的學弟學妹們:要想進大廠,這些并發編程核心技能是你必須要掌握的!!(建議收藏)》
- 《阿里面試官:高并發大流量秒殺系統如何正確的解決庫存超賣問題?(建議收藏)》
- 《Redis五大資料型別與使用場景匯總!!(含完整實戰案例,建議收藏)》
好了,今天就到這兒吧,小伙伴們點贊、收藏、評論,一鍵三連走起呀,我是冰河,我們下期見~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/344155.html
標籤:其他
