最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談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í)行一組命令的集合,用來(lái)執(zhí)行具體的某些操作。

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

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

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

我們選取default lifecycle中非常常見(jiàn)的幾個(gè)phase來(lái)說(shuō)明一下:

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

上面的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又是從哪里來(lái)的呢?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的本地倉(cāng)庫(kù)中的,如果項(xiàng)目中依賴了某些jar包,在部署的時(shí)候還需要這些依賴的jar包拷貝出來(lái),非常不方便,有了maven-dependency-plugin,則可以借用它的copy-dependencies來(lái)將項(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í)候,無(wú)需額外的參數(shù)即可運(yùn)行。

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

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

<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)文章

  • Spring中@Conditional注解的詳細(xì)講解及示例

    Spring中@Conditional注解的詳細(xì)講解及示例

    這篇文章主要介紹了Spring中@Conditional注解的詳細(xì)講解及示例,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件給容器注冊(cè)bean,需要的朋友可以參考下
    2023-11-11
  • 詳解Java volatile 內(nèi)存屏障底層原理語(yǔ)義

    詳解Java volatile 內(nèi)存屏障底層原理語(yǔ)義

    為了保證內(nèi)存可見(jiàn)性,java 編譯器在生成指令序列的適當(dāng)位置會(huì)插入內(nèi)存屏障指令來(lái)禁止特定類型的處理器重排序。為了實(shí)現(xiàn) volatile 內(nèi)存語(yǔ)義,JMM 會(huì)分別限制這兩種類型的重排序類型
    2021-09-09
  • Java實(shí)現(xiàn)的打地鼠小游戲完整示例【附源碼下載】

    Java實(shí)現(xiàn)的打地鼠小游戲完整示例【附源碼下載】

    這篇文章主要介紹了Java實(shí)現(xiàn)的打地鼠小游戲,結(jié)合完整實(shí)例形式分析了Java多線程操作及鍵盤按鍵響應(yīng)實(shí)現(xiàn)的打地鼠游戲功能相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Springboot?2.x?RabbitTemplate默認(rèn)消息持久化的原因解析

    Springboot?2.x?RabbitTemplate默認(rèn)消息持久化的原因解析

    這篇文章主要介紹了Springboot?2.x?RabbitTemplate默認(rèn)消息持久化的原因解析,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • IntelliJ IDEA各種圖標(biāo)的含義

    IntelliJ IDEA各種圖標(biāo)的含義

    這篇文章主要介紹了IntelliJ IDEA各種圖標(biāo)的含義,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java如何主動(dòng)從當(dāng)前線程獲取異常信息

    Java如何主動(dòng)從當(dāng)前線程獲取異常信息

    這篇文章主要介紹了Java如何主動(dòng)從當(dāng)前線程獲取異常信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 深入解析反編譯字節(jié)碼文件中的代碼邏輯JVM中的String操作

    深入解析反編譯字節(jié)碼文件中的代碼邏輯JVM中的String操作

    這篇文章主要介紹了深入解析反編譯字節(jié)碼文件中的代碼邏輯JVM中的String操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Mybatis防止sql注入原理分析

    Mybatis防止sql注入原理分析

    這篇文章主要介紹了Mybatis防止sql注入原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • mybatis中的多重if?條件判斷

    mybatis中的多重if?條件判斷

    這篇文章主要介紹了mybatis中的多重if?條件判斷,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳解Spring配置文件中bean的相關(guān)屬性

    詳解Spring配置文件中bean的相關(guān)屬性

    這篇文章主要為大家詳細(xì)介紹了Spring配置文件中bean的相關(guān)屬性的知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12

最新評(píng)論

沙河市| 合江县| 马尔康县| 上林县| 茂名市| 密山市| 上饶县| 溧阳市| 永寿县| 江都市| 北碚区| 朝阳县| 卓资县| 武城县| 梧州市| 宁河县| 无棣县| 满城县| 潞城市| 辛集市| 门头沟区| 潮州市| 林甸县| 于都县| 即墨市| 囊谦县| 桑植县| 奉贤区| 泸溪县| 阳高县| 翁牛特旗| 西乡县| 钦州市| 昂仁县| 澜沧| 安多县| 岳普湖县| 舒兰市| 巢湖市| 青州市| 抚宁县|