IDEA 中 maven 的 Lifecycle 和Plugins 的區(qū)別
IDEA maven 的 Lifecycle 與 Plugins
IDEA 主界面右側(cè) Maven 標(biāo)簽欄有同樣的命令,比如 install
,既在 Plugins
中存在,也在 Lifecycle
中存在。到底選哪個(gè)?二者又有什么區(qū)別呢?
經(jīng)過實(shí)驗(yàn),很多時(shí)候都是 Plugins
中的命令報(bào)錯(cuò),而 Lifecycle
中的命令正常執(zhí)行。那么是不是說 Plugins
根本就沒有必要存在?存在了還混淆視聽?
要解答這個(gè)問題,首先要了解這兩處的命令到底有什么差異。而之前,要先了解 Maven 的生命周期、階段、插件和目標(biāo)之間的關(guān)系。
生命周期(Lifecycle)
Maven 的生命周期就是對所有構(gòu)建過程進(jìn)行抽象和統(tǒng)一,包含了項(xiàng)目的清理、初始化、編譯、測試、打包、集成測試、驗(yàn)證、部署、站點(diǎn)生成等幾乎所有的構(gòu)建步驟。
Maven 內(nèi)置的三套生命周期:
- Clean Lifecycle:做一些清理工作
- pre-clean --> clean --> post-clean
- Default LifeCycle:構(gòu)建的核心部分、編譯、測試、打包、部署等
- 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)
每套生命周期都是一組階段組成。
更多請參考官方文檔:https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference
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 生成編譯過程中需要對導(dǎo)入進(jìn)行操作的源碼
- process-sources 處理源碼,如:過濾值
- generate-resources 為包中的導(dǎo)入依賴生成資源
- process-resources 復(fù)制并處理資源文件至目標(biāo)目錄,準(zhǔn)備打包
- compile 編譯項(xiàng)目的源代碼
- process-classes 處理并測試源碼,如:過濾值
- generate-test-sources
- process-test-sources
- generate-test-resources
- process-test-resources 復(fù)制并處理資源文件,至目標(biāo)測試目錄
- test-compile 編譯測試源碼
- process-test-classes
- test 使用合適的單元測試框架運(yùn)行測試。這些測試代碼不會被打包或部署
- 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í)會先按順序執(zhí)行本生命周期當(dāng)前階段之前的所有階段,再執(zhí)行當(dāng)前階段。
例如,Clean Lifecycle
有 3 個(gè)階段,按順序依次為:
- pre-clean
- clean
- post-clean
則若執(zhí)行命令 mvn clean
實(shí)際按順序執(zhí)行了 Clean Lifecycle
的 pre-clean
與 clean
。
- 那么如果只想執(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)
(即通過執(zhí)行相應(yīng)的插件:目標(biāo)
來實(shí)現(xiàn)),有些階段沒有聲明綁定的插件:目標(biāo)
,是通過其他方式來實(shí)現(xiàn)的。
生命周期及包含階段,階段聲明綁定的插件:目標(biāo)
如下:
1.Clean Lifecycle
順序 | 階段 | 插件:目標(biāo) |
---|---|---|
1 | pre-clean | |
2 | clean | clean:clean |
3 | post-clean |
2.Default Lifecycle
順序 | 階段 | 插件:目標(biāo) |
---|---|---|
1 | validate | |
2 | initialize | |
3 | generate-sources | |
4 | process-sources | |
5 | generate-resources | |
6 | process-resources | resources:resources |
7 | compile | compiler:compile |
8 | process-classes | |
9 | generate-test-sources | |
10 | process-test-sources | |
11 | generate-test-resources | |
12 | process-test-resources | resources:testResources |
13 | test-compile | compiler:testCompile |
14 | process-test-classes | |
15 | test | surefire:test |
16 | prepare-package | |
17 | package | |
18 | pre-integration-test | |
19 | integration-test | |
20 | post-integration-test | |
21 | verify | |
22 | install | install:install |
23 | deploy | deploy:deploy |
3.Site Lifecycle
順序 | 階段 | 插件:目標(biāo) |
---|---|---|
1 | pre-site | |
2 | site | site:site |
3 | post-site | |
4 | site-deploy | site:deploy |
在 IDEA 中使用 Lifecycle 下的 install (等價(jià)于在命令行執(zhí)行 mvn install
),代表執(zhí)行的是 生命周期 的一個(gè)階段(會自動(dòng)先執(zhí)行之前的所有階段)。
如上所示,install
階段前有 21 個(gè)階段,即 mvn install
會先執(zhí)行前面的 21 個(gè)階段,之后再執(zhí)行 install
這個(gè)階段。
而作為對比,IDEA 中使用 Plugin 下的 install(等價(jià)于在命令行執(zhí)行 mvn install:install
),代表執(zhí)行的是 插件:目標(biāo)
,它單獨(dú)執(zhí)行,不會先去執(zhí)行之前的 21 個(gè)階段。
另外,由于 生命周期 可以和 插件:目標(biāo)
一起執(zhí)行,所以可以先執(zhí)行 verify
生命周期(執(zhí)行 1~21 階段),再執(zhí)行 install:install
(第 22 階段)。所以以下兩種寫法其實(shí)最終實(shí)現(xiàn)效果是等價(jià)的。
mvn install mvn verify install:install
參考資料:
https://blog.csdn.net/gao_zhennan/article/details/89713407
https://www.cnblogs.com/zhaiqianfeng/p/4620138.html
補(bǔ)充:idea中maven的Plugins和 Lifecycle 區(qū)別
如果在Plugins里面安裝會出現(xiàn)問題,因?yàn)镻lugins安裝,只會執(zhí)行安裝操作,而maven生命周期安裝之前的操作都不會執(zhí)行 ,就會安裝失敗。但是使用 Lifecycle中的install的話,在執(zhí)行instal生命階段之前的說有生命周期階段,包括(clean compiler test package)
到此這篇關(guān)于IDEA 中 maven 的 Lifecycle 和Plugins 的區(qū)別的文章就介紹到這了,更多相關(guān)maven 的 Lifecycle 和Plugins區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 下載遠(yuǎn)程maven倉庫的jar?手動(dòng)放到本地倉庫詳細(xì)操作
- 解決問題:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources
- maven導(dǎo)入本地倉庫jar包,報(bào):Could?not?find?artifact的解決
- Maven項(xiàng)目修改JDK版本全過程
- Spring Boot結(jié)合IDEA自帶Maven插件如何快速切換profile
- Maven?項(xiàng)目用Assembly打包可執(zhí)行jar包的方法
- 淺談一下maven優(yōu)缺點(diǎn)及使用和特點(diǎn)
相關(guān)文章
使用SpringCloudApiGateway之支持Cors跨域請求
這篇文章主要介紹了使用SpringCloudApiGateway之支持Cors跨域請求的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07springBoot整合jwt實(shí)現(xiàn)token令牌認(rèn)證的示例代碼
實(shí)施Token驗(yàn)證的方法挺多的,還有一些標(biāo)準(zhǔn)方法,比如JWT,本文主要介紹了springBoot整合jwt實(shí)現(xiàn)token令牌認(rèn)證的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08使用Postman傳遞arraylist數(shù)據(jù)給springboot方式
這篇文章主要介紹了使用Postman傳遞arraylist數(shù)據(jù)給springboot方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12java基礎(chǔ)之標(biāo)簽、按鈕和按鈕事件簡介
本文給大家?guī)淼氖莏ava圖形界面的基礎(chǔ)知識,簡單介紹了標(biāo)簽、按鈕和按鈕事件,十分的詳細(xì),有需要的小伙伴可以參考下。2015-06-06Java環(huán)境變量的設(shè)置方法(圖文教程)
想要成功配置Java的環(huán)境變量,那肯定就要安裝JDK,才能開始配置的。2013-05-05使用SpringBoot中web項(xiàng)目推薦目錄結(jié)構(gòu)的問題
這篇文章主要介紹了SpringBoot中web項(xiàng)目推薦目錄結(jié)構(gòu)的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01Spring?Boot小型項(xiàng)目如何使用異步任務(wù)管理器實(shí)現(xiàn)不同業(yè)務(wù)間的解耦
這篇文章主要介紹了Spring?Boot小型項(xiàng)目如何使用異步任務(wù)管理器實(shí)現(xiàn)不同業(yè)務(wù)間的解耦,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08