Categories
程式開發

面試官:開發過Maven插件嗎?我:開發過啊。 。 。


寫在前面

轉眼間,今天已經是假期的第4天了。今天要給大家分享點啥呢?想了半天,想起了之前去某寶面試的情景。記得面試前自己基於Maven開發過一些簡單實用的插件,而且在自己的本地環境中一直在使用,極大的提高了我的開發和工作效率。恰好在面試時,某寶的面試官問了我一個問題:開發過Maven插件嗎?我:開發過啊。面試官:那你給我講講你是如何開發的呢?我:吧啦吧啦吧啦。 。 。面試官:下週入職吧!我:好的。就這樣,我拿到了Offer。

Maven插件的相關概念

插件坐標定位

插件與普通jar包一樣包含坐標定位屬性即:groupId、artifactId、version,當使用該插件時會從本地倉庫中搜索,如果沒有則從遠程倉庫下載,例如下面的配置所示。


org.apache.maven.plugins
maven-dependency-plugin
2.10

execution配置

execution 配置包含一組指示插件如何執行的屬性:

id : 執行器命名phase:標識執行的階段goals:標識執行的目標或功能configuration:標識執行目標所需的配置文件

插件的配置和使用示例

將插件依賴拷貝到指定目錄。


org.apache.maven.plugins
maven-dependency-plugin
3.1.1

copy-dependencies
package

copy-dependencies

${project.build.directory}/alternateLocation
false
true
true

常用插件的使用

通過命令執行插件語法

除了通過配置的方式使用插件以外,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文件的配置,如下所示。

4.0.0
io.mykit.plugin
1.0.0-SNAPSHOT
mykit-maven-plugin
maven-plugin

org.apache.maven
maven-plugin-api
3.5.0

org.apache.maven.plugin-tools
maven-plugin-annotations
3.5

org.apache.maven.plugins
maven-compiler-plugin
3.6.1

1.8
1.8

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文件中引入如下配置即可。


io.mykit.plugin
1.0.0-SNAPSHOT
mykit-maven-plugin


冰河技术微信公众号作者

重磅福利

微信搜一搜【冰河技術】微信公眾號,關注這個有深度的程序員,每天閱讀超硬核技術乾貨,公眾號內回复【PDF】有我準備的一線大廠面試資料和我原創的超硬核PDF技術文檔,以及我為大家精心準備的多套簡歷模板(不斷更新中),希望大家都能找到心儀的工作,學習是一條時而鬱鬱寡歡,時而開懷大笑的路,加油。如果你通過努力成功進入到了心儀的公司,一定不要懈怠放鬆,職場成長和新技術學習一樣,不進則退。如果有幸我們江湖再見!

另外,我開源的各個PDF,後續我都會持續更新和維護,感謝大家長期以來對冰河的支持! !

寫在最後

如果你覺得冰河寫的還不錯,請微信搜索並關注「 冰河技術」微信公眾號,跟冰河學習高並發、分佈式、微服務、大數據、互聯網和雲原生技術,「 冰河技術」微信公眾號更新了大量技術專題,每一篇技術文章乾貨滿滿!不少讀者已經通過閱讀「 冰河技術」微信公眾號文章,吊打麵試官,成功跳槽到大廠;也有不少讀者實現了技術上的飛躍,成為公司的技術骨幹!如果你也想像他們一樣提升自己的能力,實現技術能力的飛躍,進大廠,升職加薪,那就關注「 冰河技術」微信公眾號吧,每天更新超硬核技術乾貨,讓你對如何提陞技術能力不再迷茫!

面試官:開發過Maven插件嗎?我:開發過啊。  。  。 3