Maven的這三個用法你必定要會!

本文中將介紹maven的自定義插件(入門實戰)自定義archeType模板(實戰)按環境打包(實戰)三個在私服中經常需用的操做。html

一、自定義archeType模板

1.一、什麼是archeType

咱們在建立maven項目的時候,你會發現有這麼多的apache提供的模板。spring

或者使用mvn archetype:generate命令來快速建立maven項目,也會有不少個選項,讓你選擇模板序號。那每一個模板之間有什麼區別呢?數據庫

每一個模板裏其實就是附帶不一樣的依賴和插件。通常在公司私服裏都會有屬於本公司的一套archeType模板,裏面有着調試好的項目用到的依賴包和版本號。apache

1.二、建立archetype

假如本身已經有了一個maven項目,想給該項目建立一個archeType模板。api

cd 到項目根目錄下執行(pom.xml同級目錄)。app

此時會在項目target下生成這些文件:maven

1.三、生成archetype模板

先 cdtarget/generated-sources/archetype/ide

而後執行 mvn install測試

執行成功後,執行crawl命令,在本地倉庫的根目錄生成archetype-catalog.xml骨架配置文件:ui

mvnarchetype:crawl

來看一看它裏面的內容:

1.四、使用archetype模板

執行mvn archetype:generate -DarchetypeCatalog=local從本地archeType模板中建立項目。

而後會讓你選擇模板序號和groupId artifactId version和package信息:

項目建立成功!

固然,也可使用IDEA來幫咱們用圖形界面使用archeType模板建立項目:

後面的就與建立普通項目相同了,不作演示。

二、自定義插件

在這裏我只是作了簡單的示例,更復雜的功能開發請參考mojo的API:

maven.apache.org/developers/…

2.一、插件提供者

插件提供者項目結構:

2.1.一、修改packaging

2.1.二、修改pom

這兩個依賴是自定義插件必須的依賴,表明了它是一個Mojo工程,裏面包含了一些Mojo的接口和抽象類以及註解。

2.1.三、coding業務邏輯

注意這裏面的@Parameter @Mojo LifecyclePhase.PACKAGE都是org.apache.maven.plugins.annotations包下的:

@Parameter註解會獲取消費者配置文件中的變量值並賦值。

defaultPhase =LifecyclePhase.PACKAGE聲明瞭該插件觸發的生命週期。

@Mojo定義插件的goal名字。

2.1.四、clean and install

執行mvn clean install,在target目錄下會生成這樣一個jar包,這就是插件包。

2.二、插件消費者

插件消費者 : 項目結構

2.2.一、修改pom

若是不加,咱們只能經過執行插件或者執行命令的方式來執行,若是想讓它在執行package的時候自動執行,就須要設置該屬性,能夠把它理解成hook。

2.2.二、如何傳遞參數給plugin

在插件提供者中,有個MyMojo的類,有這樣一段代碼:

它和你用過的spring註解同樣,也是用來以註解的形式獲取參數的值。

相對應的,在插件消費者的配置中咱們就應該相應的給出參數的定義:

上面的配置與變量名一一對應便可。這時候你會發現maven插件中自動會添加一個plugins選項:

執行該插件:mvnmyprovide:fantj 或者直接點擊:

三、Profile按環境打包

在平常開發中,咱們項目的開發環境和生產環境以及測試環境每每是不一樣的,好比:數據庫的url等。在項目上生產環境時,就須要修改這些參數,給開發形成不便。爲了解決該問題,Maven 2.0引入了構建配置文件的概念(build profiles)。

它能幹什麼呢?

假如你的生產環境和開發環境所需環境配置不一樣,生產環境配置文件是pro.properties,開發環境配置文件是dev.properties,那麼用maven profile ,你能夠實現打包開發環境jar包的時候只將dev.properties打包並使用,生產環境打包同理。

在哪裏聲明呢?

它能夠在每一個項目的pom.xml文件中聲明,也能夠在maven的用戶setting.xml下聲明,也能夠在maven全局環境下設置setting.xml,詳情以下。

1.Per Project Defined in the POM itself (pom.xml).

2.Per User Defined in the Maven-settings(%USER_HOME%/.m2/settings.xml)

3.Global Defined in the globalMaven-settings (${maven.home}/conf/settings.xml)

4.Profile descriptor 不支持3.0,詳情請看:

cwiki.apache.org/MAVEN/maven…

雖然有這麼多define的方式,可是咱們通常使用的是第一種defined in the pom,由於不見得每一個項目的生產環境都如出一轍,固然這個也是因我的狀況而異。

實戰

3.一、項目結構

3.二、pom.xml

3.三、三個application.properties

3.四、打包

能夠看到只將pro/application.properties進行了編譯。

相關文章
相關標籤/搜索