idea maven 工具打包,插件能功認識及idea中Maven-build lifecycle中下面標簽詳解


進入 maven projects 界面

 

 

 

 

 

1. clean 清除之前的編譯文件

2. install 重新下載安裝 最新的jar包,

3. package 將項目 編譯 => 試運行 => 打包,(如果本模塊打包依賴有其它模塊,其它模塊如果有更新,打包報找不到依賴模塊的類時,先clean在install其它所依賴模塊或者直接在maven本地庫找到並刪除所依賴模塊的jar包,最后在重新package本模塊)

提示成功后,進入項目找到 target 文件夾

 

 

 pom文件 的 packaging 標簽是war 就打成war包 是jar 就打成jar包

 

 

 

Maven是基於一個build lifecycle的中心概念,意味着構建和發布特定項目的過程是明確定義的。 
對於人們構建一個項目,這意味着只需要學會少數命令來構建任意maven項目,然后pom會確保他們會得到他們想要的結果。 
有三種內置的build lifecycle:default,clean,site。default生命周期處理項目的部署,clean生命周期處理項目的清理,site生命周期生成站點文檔。

Build Lifecycle由Phase組成

每種lifecycle由不同的一組phase組成,一個phase代表lifecycle的一個階段。 
默認lifecycle執行的phase:

  • validate:驗證項目的正確性以及包含所有必要的信息
  • compile:編譯源碼
  • test:編譯和運行測試代碼
  • package:把編譯好的源碼打成包,如jar
  • integration-test
  • verify
  • install:把項目安裝到本地倉庫中去,作為本地其他項目的依賴
  • deploy:把最終的包拷貝到遠程倉庫上和其他開發者和項目分享(比如jekens會用到)

這些phase(包括沒有列出來的phase)會被順序地執行來完成default lifecycle。以上面的phase為例,這意味着當使用默認的lifecycle時,Maven會首先驗證項目,然后嘗試編譯源碼,運行測試,把二進制代碼打包(如jar包),對這些包運行集成測試,驗證集成測試,安裝驗證完的包到本地倉庫去,然后把安裝完的包部署到遠程倉庫。

Build Phase由Plugin Goal組成

盡管一個phase負責lifecycle的一個階段,但執行這些階段的方式可能會不同,這是通過把plugin goals綁定到phase上完成的。 
一個goal代表着一個特定的任務(比phase粒度要細)用於構建和管理一個項目。goal可以綁定到0個到多個phase上,沒有綁定到phase上的goal可以在lifecycle外直接使用(如使用命令行)。goal的執行順序取決於其被調用的順序。 例如下面命令:

 
  • 1
  • 1

上面命令中,clean phase會首先被執行,然后執行dependency:copy-dependencies goal,最后執行package phase。 
一個phase也可以有0個或多個綁定的goal,如果沒有goal綁定到它身上,它將不會被執行,如果有多個goal綁定,則會執行所有綁定的goal。

一些Phase通常不會從命令行直接調用

名字中帶有連字符的phase(如pre-,post-)通常不會從命令行直接調用。這些phase處理中間結果,通常不會在build lifecycle外執行。例如,直接調用integration-test,可能會出現異常。 
代碼覆蓋工具如Jacoco 以及容器插件如Tomcat會綁定goal到pre-integration-test phase上來准備集成測試的容器環境,這些插件還會綁定goal到post-integration-test phase來收集代碼覆蓋數據或銷毀測試容器環境。 
失效保護(Failsafe )和代碼覆蓋插件綁定goal到integration-test和verify phase上,結果就是在verify phase后可以得到測試和代碼覆蓋的報告。如果integration-test從命令行調用,不會有報告產生,更糟糕的情況是集成測試的環境可能停留在掛起的狀態。

設置項目使用的Build Lifecycle

build lifecycle使用起來很簡單,但在maven項目構建時,我們怎么給每個phase指定任務呢?

Packaging

首先我們可以通過packaging元素設置項目的打包方式來指定任務,maven支持的打包方式有:jar, war, ear 和 pom。如果不指定,默認為jar。 
每種打包方式都包含了一系列的goal綁定到特定的phase上,例如,jar的打包方式會綁定下面的goal到default lifecycle的phase上:

  • process-resources —— resources:resources 
  • compile —— compiler:compile 
  • process-test-resources —— resources:testResources 
  • test-compile —— compiler:testCompile 
  • test —— surefire:test 
  • package —— jar:jar 
  • install —— install:install 
  • deploy —— deploy:deploy 

如上所示幾乎是標准的綁定,但一些打包方式會有所不同。例如,pom打包方式只給install和deploy phase綁定goal。完整的綁定列表可以參考Lifecycle Reference

Plugin

第二中添加goal到phase上的方式是配置項目中的插件。插件是給Maven提供goal的artifact。另外,一個插件可能會有一個或多個goal,每個goal代表了這個插件的一種能力。例如Compiler插件有兩個goal:compile和testCompile,前面一個用來編譯main下的源碼,后面一個用來編譯test源碼。 
插件可以把goal綁定到指定的phase上,要注意,把插件本身添加進來還不夠,必須指定哪些goal要作為我們構建項目的一部分。 
如果有多個goal綁定到一個phase上,會先執行本來的goal,再執行pom中綁定到phase上的goal,也可以在executions標簽上指定goal的執行順。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM