溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

IDEA中maven的Lifecycle和Plugins有什么區(qū)別

發(fā)布時(shí)間:2023-03-01 10:57:45 來(lái)源:億速云 閱讀:190 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇“IDEA中maven的Lifecycle和Plugins有什么區(qū)別”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“IDEA中maven的Lifecycle和Plugins有什么區(qū)別”文章吧。

    IDEA maven 的 Lifecycle 與 Plugins

    IDEA 主界面右側(cè) Maven 標(biāo)簽欄有同樣的命令,比如 install,既在 Plugins 中存在,也在 Lifecycle中存在。到底選哪個(gè)?二者又有什么區(qū)別呢?

    經(jīng)過(guò)實(shí)驗(yàn),很多時(shí)候都是 Plugins中的命令報(bào)錯(cuò),而 Lifecycle 中的命令正常執(zhí)行。那么是不是說(shuō) Plugins 根本就沒(méi)有必要存在?存在了還混淆視聽(tīng)?

    要解答這個(gè)問(wèn)題,首先要了解這兩處的命令到底有什么差異。而之前,要先了解 Maven 的生命周期、階段、插件和目標(biāo)之間的關(guān)系。

    生命周期(Lifecycle)

    Maven 的生命周期就是對(duì)所有構(gòu)建過(guò)程進(jìn)行抽象和統(tǒng)一,包含了項(xiàng)目的清理、初始化、編譯、測(cè)試、打包、集成測(cè)試、驗(yàn)證、部署、站點(diǎn)生成等幾乎所有的構(gòu)建步驟。

    Maven 內(nèi)置的三套生命周期:

    • Clean Lifecycle:做一些清理工作

      • pre-clean --> clean --> post-clean

    • Default LifeCycle:構(gòu)建的核心部分、編譯、測(cè)試、打包、部署等

      • validate --> compile --> test --> package --> integration-test --> verify --> install --> deploy

    • Site Lifecycle:生成項(xiàng)目報(bào)告、站點(diǎn)、發(fā)布站點(diǎn)

      • pre-site --> site --> post-site --> site-deploy

    階段(Phase)

    每套生命周期都是一組階段組成。

    Clean Lifecycle

    • pre-clean 執(zhí)行一些需要在 clean 之前完成的工作

    • clean 移除所有上一次構(gòu)建所生成的文件

    • post-clean 執(zhí)行一些需要在 clean 之后立即完成的工作

    Default Lifecycle

    • validate 驗(yàn)證項(xiàng)目正確且所需信息都可獲得

    • initialize 初始化構(gòu)建狀態(tài),如:設(shè)置屬性值、創(chuàng)建目錄

    • generate-sources 生成編譯過(guò)程中需要對(duì)導(dǎo)入進(jìn)行操作的源碼

    • process-sources 處理源碼,如:過(guò)濾值

    • generate-resources 為包中的導(dǎo)入依賴生成資源

    • process-resources 復(fù)制并處理資源文件至目標(biāo)目錄,準(zhǔn)備打包

    • compile 編譯項(xiàng)目的源代碼

    • process-classes 處理并測(cè)試源碼,如:過(guò)濾值

    • generate-test-sources

    • process-test-sources

    • generate-test-resources

    • process-test-resources 復(fù)制并處理資源文件,至目標(biāo)測(cè)試目錄

    • test-compile 編譯測(cè)試源碼

    • process-test-classes

    • test 使用合適的單元測(cè)試框架運(yùn)行測(cè)試。這些測(cè)試代碼不會(huì)被打包或部署

    • prepare-package

    • package 接收編譯好的代碼,打包成可發(fā)布的格式,如:jar

    • pre-integration-test

    • integration-test

    • post-integration-test

    • verify

    • install

    Site Lifecycle

    • pre-site 執(zhí)行一些需要在生成站點(diǎn)文檔之前完成的工作

    • site 生成項(xiàng)目的站點(diǎn)文檔

    • post-site 執(zhí)行一些需要在生成站點(diǎn)文檔之后完成的工作,并為部署做準(zhǔn)備

    • site-deploy 將生成的站點(diǎn)文檔部署到特定的服務(wù)器

    特點(diǎn):階段在生命周期內(nèi)具有順序性,在執(zhí)行生命周期中某個(gè)階段時(shí)會(huì)先按順序執(zhí)行本生命周期當(dāng)前階段之前的所有階段,再執(zhí)行當(dāng)前階段。

    例如,Clean Lifecycle有 3 個(gè)階段,按順序依次為:

    • pre-clean

    • clean

    • post-clean

    則若執(zhí)行命令 mvn clean 實(shí)際按順序執(zhí)行了 Clean Lifecyclepre-cleanclean。

    • 那么如果只想執(zhí)行第 2 個(gè)階段呢,那就執(zhí)行命令 mvn clean:clean(這就是下面要提到的插件:目標(biāo)的執(zhí)行方式了)

    插件(plugin)和目標(biāo)(goal)

    一個(gè)階段由插件與目標(biāo)組成。

    可以理解為:

    • 一個(gè)階段:一個(gè)步驟

    • 插件:打成 jar 包的 java 程序

    • 目標(biāo):插件程序的一個(gè)執(zhí)行參數(shù)

    即向插件程序傳入一個(gè)執(zhí)行參數(shù)并執(zhí)行一次該插件程序,就等于進(jìn)行了一個(gè)步驟。

    例子:

    mvn compiler:compile

    compiler 是插件,compile 是目標(biāo),compiler:compile是一個(gè)階段。

    插件:目標(biāo) 表示一個(gè)特定任務(wù),階段是生命周期中的特定步驟。

    有些階段聲明綁定的插件:目標(biāo)(即通過(guò)執(zhí)行相應(yīng)的插件:目標(biāo)來(lái)實(shí)現(xiàn)),有些階段沒(méi)有聲明綁定的插件:目標(biāo),是通過(guò)其他方式來(lái)實(shí)現(xiàn)的。

    生命周期及包含階段,階段聲明綁定的插件:目標(biāo)如下:

    1.Clean Lifecycle

    順序階段插件:目標(biāo)



    1pre-clean
    2cleanclean:clean
    3post-clean

    2.Default Lifecycle

    順序階段插件:目標(biāo)
    1validate
    2initialize
    3generate-sources
    4process-sources
    5generate-resources
    6process-resourcesresources:resources
    7compilecompiler:compile
    8process-classes
    9generate-test-sources
    10process-test-sources
    11generate-test-resources
    12process-test-resourcesresources:testResources
    13test-compilecompiler:testCompile
    14process-test-classes
    15testsurefire:test
    16prepare-package
    17package
    18pre-integration-test
    19integration-test
    20post-integration-test
    21verify
    22installinstall:install
    23deploydeploy:deploy

    3.Site Lifecycle

    順序階段插件:目標(biāo)
    1pre-site
    2sitesite:site
    3post-site
    4site-deploysite:deploy

    在 IDEA 中使用 Lifecycle 下的 install (等價(jià)于在命令行執(zhí)行 mvn install),代表執(zhí)行的是 生命周期 的一個(gè)階段(會(huì)自動(dòng)先執(zhí)行之前的所有階段)。

    如上所示,install 階段前有 21 個(gè)階段,即 mvn install 會(huì)先執(zhí)行前面的 21 個(gè)階段,之后再執(zhí)行 install 這個(gè)階段。

    而作為對(duì)比,IDEA 中使用 Plugin 下的 install(等價(jià)于在命令行執(zhí)行 mvn install:install),代表執(zhí)行的是 插件:目標(biāo),它單獨(dú)執(zhí)行,不會(huì)先去執(zhí)行之前的 21 個(gè)階段。

    另外,由于 生命周期 可以和 插件:目標(biāo) 一起執(zhí)行,所以可以先執(zhí)行 verify 生命周期(執(zhí)行 1~21 階段),再執(zhí)行 install:install(第 22 階段)。所以以下兩種寫(xiě)法其實(shí)最終實(shí)現(xiàn)效果是等價(jià)的。

    mvn install
    mvn verify install:install

    補(bǔ)充:idea中maven的Plugins和 Lifecycle 區(qū)別

    如果在Plugins里面安裝會(huì)出現(xiàn)問(wèn)題,因?yàn)镻lugins安裝,只會(huì)執(zhí)行安裝操作,而maven生命周期安裝之前的操作都不會(huì)執(zhí)行 ,就會(huì)安裝失敗。但是使用 Lifecycle中的install的話,在執(zhí)行instal生命階段之前的說(shuō)有生命周期階段,包括(clean compiler test package)

    IDEA中maven的Lifecycle和Plugins有什么區(qū)別

    以上就是關(guān)于“IDEA中maven的Lifecycle和Plugins有什么區(qū)別”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI