欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Maven的build生命周期和常用plugin

 更新時(shí)間:2021年06月02日 10:52:41   作者:flydean  
Maven和gradle應(yīng)該是現(xiàn)代java程序員中使用的最多的兩種構(gòu)建工具。在它們出現(xiàn)之前,則是ant的天下。本文將介紹Maven的build生命周期和常用plugin。

簡(jiǎn)介

Maven為我們封裝了很多構(gòu)建中非常有用的操作,我們只需要執(zhí)行簡(jiǎn)單的幾個(gè)mvn命令即可。

今天我們要討論一下mvn命令之下的生命周期的構(gòu)建。

lifecycle和Phases

所謂lifecycle,可以理解為可以執(zhí)行一組命令的集合,用來執(zhí)行具體的某些操作。

Maven默認(rèn)有三種lifecycle:default,clean和site。default主要用來處理項(xiàng)目的開發(fā),clean主要用來負(fù)責(zé)項(xiàng)目的清理,site主要用來生成項(xiàng)目的文檔。

lifecycle是由一個(gè)或者多個(gè)phase組成的。

以default為例,它大概由23個(gè)phases組成,這些phases將會(huì)按順序執(zhí)行來完成default的lifecycle。

我們選取default lifecycle中非常常見的幾個(gè)phase來說明一下:

  • validate - 用來驗(yàn)證項(xiàng)目是否正確或者項(xiàng)目所需要的信息是否可用。
  • compile - 用來編譯項(xiàng)目代碼
  • test - 執(zhí)行代碼中的單元測(cè)試
  • package - 將編譯后的代碼進(jìn)行打包,打包可有很多種方式,比如:jar,war等
  • verify - 執(zhí)行集成測(cè)試
  • install - 將項(xiàng)目安裝到本地倉庫中,供有依賴關(guān)系的其他項(xiàng)目使用
  • deploy - 將項(xiàng)目部署到遠(yuǎn)程倉庫,以便共享給其他的用戶

上面的phase執(zhí)行是有順序的,比如我們?nèi)绻麍?zhí)行mvn verify,則會(huì)順序執(zhí)行validate,compile,test和package。

Phases和Goals

Phases是一種任務(wù)的集合,它是由一個(gè)或者多個(gè)Goals組成的。Goals可以包含在Phases里面執(zhí)行,也可以單獨(dú)用命令執(zhí)行。

那么Goals又是從哪里來的呢?Goals是定義在maven中的plugin中的。

我們看下面一張直觀的圖:

下圖列出了現(xiàn)有l(wèi)ifecycle中的phase,和相應(yīng)phase所對(duì)應(yīng)的plugin。

我們可以看到基本每個(gè)phase都和一個(gè)plugin中的golas是相對(duì)于應(yīng)的。

除了使用命名直接指定要執(zhí)行的phase以外,還可以直接指定goals:

mvn clean dependency:copy-dependencies package

上面的命令中clean和package是phase,而copy-dependencies則是goals。

常用plugin介紹

這里我們介紹兩個(gè)非常常用的maven plugin,maven-dependency-plugin和maven-jar-plugin。

maven-dependency-plugin

maven中的依賴jar包是存放在maven的本地倉庫中的,如果項(xiàng)目中依賴了某些jar包,在部署的時(shí)候還需要這些依賴的jar包拷貝出來,非常不方便,有了maven-dependency-plugin,則可以借用它的copy-dependencies來將項(xiàng)目的依賴jar包拷貝出啦,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.1.2</version>
    <executions>
        <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>
                    ${project.build.directory}/lib
                </outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

goals是和相應(yīng)的phase相關(guān)聯(lián)的,在上面的例子中,我們將copy-dependencies和package相關(guān)聯(lián),則在我們執(zhí)行mvn package的時(shí)候就會(huì)自動(dòng)執(zhí)行copy-dependencies,從配置文件可以知道,我們將會(huì)把項(xiàng)目的依賴jar包拷貝到項(xiàng)目的build目錄的lib目錄下。

maven-jar-plugin

有了依賴的lib,可以將main程序打包成為一個(gè)可執(zhí)行的jar包。這時(shí)候我們就需要使用到maven-jar-plugin。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.flydean.MavenClass</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

為了生成可執(zhí)行的jar包,我們需要在MANIFEST.MF文件中添加mainClass文件的路徑,這樣在執(zhí)行jar包的時(shí)候,無需額外的參數(shù)即可運(yùn)行。

遺憾的是,如果我們的class文件用到了外部jar包的依賴時(shí)候,jar包直接運(yùn)行會(huì)出錯(cuò),因?yàn)檎也坏剿蕾嚨膉ar包。

在介紹maven-dependency-plugin的時(shí)候,我們已經(jīng)把所用到的lib拷貝出來了,這里我們可以直接使用:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>com.flydean.MavenClass</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

多加了兩個(gè)addClasspath的參數(shù),我們將打包好的jar包解壓縮。

可以看到里面多了一個(gè)MANIFEST.MF的文件:

Manifest-Version: 1.0

Created-By: Maven Jar Plugin 3.2.0

Build-Jdk-Spec: 14

Class-Path: lib/lombok-1.18.10.jar lib/logback-classic-1.2.3.jar lib/log

 back-core-1.2.3.jar lib/slf4j-api-1.7.25.jar

Main-Class: com.flydean.MavenClass

這個(gè)文件里面包含了一些jar包的元數(shù)據(jù),并且里面添加了Class-Path和Main-Class文件,這時(shí)候執(zhí)行運(yùn)行jar包就可以直接執(zhí)行了。

以上就是淺談Maven的build生命周期和常用plugin的詳細(xì)內(nèi)容,更多關(guān)于Maven的build生命周期和常用plugin的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java并發(fā)編程之CountDownLatch的使用

    Java并發(fā)編程之CountDownLatch的使用

    CountDownLatch是一個(gè)倒數(shù)的同步器,常用來讓一個(gè)線程等待其他N個(gè)線程執(zhí)行完成再繼續(xù)向下執(zhí)行,本文主要介紹了CountDownLatch的具體使用方法,感興趣的可以了解一下
    2023-05-05
  • Java遠(yuǎn)程連接Linux服務(wù)器并執(zhí)行命令及上傳文件功能

    Java遠(yuǎn)程連接Linux服務(wù)器并執(zhí)行命令及上傳文件功能

    這篇文章主要介紹了Java遠(yuǎn)程連接Linux服務(wù)器并執(zhí)行命令及上傳文件功能,本文是小編整理的代碼筆記,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • 基于HTTP協(xié)議實(shí)現(xiàn)簡(jiǎn)單RPC框架的方法詳解

    基于HTTP協(xié)議實(shí)現(xiàn)簡(jiǎn)單RPC框架的方法詳解

    RPC全名(Remote?Procedure?Call),翻譯過來就是遠(yuǎn)程過程調(diào)用,本文將為大家介紹如何基于HTTP協(xié)議實(shí)現(xiàn)簡(jiǎn)單RPC框架,感興趣的小伙伴可以了解一下
    2023-06-06
  • java實(shí)現(xiàn)波雷費(fèi)密碼算法示例代碼

    java實(shí)現(xiàn)波雷費(fèi)密碼算法示例代碼

    這篇文章主要介紹了java實(shí)現(xiàn)波雷費(fèi)密碼算法示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Java Synchronized的使用詳解

    Java Synchronized的使用詳解

    這篇文章主要介紹了Java Synchronized的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Jmeter如何獲取jtl文件中所有的請(qǐng)求報(bào)文詳解

    Jmeter如何獲取jtl文件中所有的請(qǐng)求報(bào)文詳解

    JMeter的可以創(chuàng)建一個(gè)包含測(cè)試運(yùn)行結(jié)果的文本文件,這些通常稱為JTL文件,因?yàn)檫@是默認(rèn)擴(kuò)展名,但可以使用任何擴(kuò)展名,這篇文章主要給大家介紹了關(guān)于Jmeter如何獲取jtl文件中所有的請(qǐng)求報(bào)文的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • SpringBoot2.0+阿里巴巴Sentinel動(dòng)態(tài)限流實(shí)戰(zhàn)(附源碼)

    SpringBoot2.0+阿里巴巴Sentinel動(dòng)態(tài)限流實(shí)戰(zhàn)(附源碼)

    這篇文章主要介紹了SpringBoot2.0+阿里巴巴Sentinel動(dòng)態(tài)限流實(shí)戰(zhàn)(附源碼),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 類似微信說話功能的錄音處理代碼分享

    類似微信說話功能的錄音處理代碼分享

    這篇文章主要介紹了類似微信中說話功能的錄音處理代碼,需要大家自己加UI界面,大家參考使用吧
    2014-01-01
  • java冒泡排序和選擇排序示例

    java冒泡排序和選擇排序示例

    這篇文章主要介紹了java冒泡排序和選擇排序示例,需要的朋友可以參考下
    2014-05-05
  • Springboot整合Druid實(shí)現(xiàn)對(duì)訪問的監(jiān)控方式

    Springboot整合Druid實(shí)現(xiàn)對(duì)訪問的監(jiān)控方式

    這篇文章主要介紹了Springboot整合Druid實(shí)現(xiàn)對(duì)訪問的監(jiān)控方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評(píng)論