maven生命周期和依賴的範圍
轉載:http://blog.csdn.net/J080624/article/details/54692444
【1】什麽是依賴?
當 A jar 包用到了 B jar 包時,A就對B產生了依賴;
在項目中以依賴的方式引入一個jar:
使用dependency標簽指定被依賴的jar的坐標即可。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
【2】依賴的範圍
註意上述最後一項:scope,表明依賴的範圍。最常用的三個範圍:test compile provided。
依賴的其他作用域:
runtime:表示該依賴項只有在運行時才是需要的,在編譯的時候不需要。這種類型的依賴項將在運行和test的類路徑下可以訪問。
system:當scope為system時,表示該依賴項是我們自己提供的,不需要Maven到倉庫裏面去找。
指定scope為system需要與另一個屬性元素systemPath一起使用,它表示該依賴項在當前系統的位置,使用的是絕對路徑。
- 1
- 2
- 3
- 4
- 5
【3】依賴的傳遞性
A 依賴 B,B 依賴 C,那麽 A 是否可以使用 C 呢?
答:如果 B 依賴 C 的範圍是compile,就可以依賴;否則,不可。【test provided 範圍的依賴是不可以傳遞的!】
【4】依賴的原則
① 路徑最短者優先
② 路徑相同時先聲明著優先
如下圖,同時依賴HelloFriend和OurFriends,但是二者所依賴的log4j不同。那麽MakeFriends將會依賴 pom.xml中,先聲明的那個工程的log4j。
【5】依賴的排除
如果不想使用依賴的jar,那麽可以在pom.xml文件中配置:
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
- 1
- 2
- 3
- 4
- 5
- 6
【6】Maven的生命周期
Maven生命周期定義了各個構建環節的執行順序,有了這個清單,Maven就可以自動化的執行構建命令了。
Maven有三套 相互獨立的生命周期,分別是:
① Clean Lifecycle在進行真正的構建之前進行一些清理工作;
② Default Lifecycle 構建的核心部門,編譯、測試、打包、安裝、部署等等;
③ Site Lifecycle 生成項目報告 ,站點。發布點(沒用過)。
它們是相互獨立的,可以僅僅調用clean來清理工作目錄,僅僅調用site來生成站點。當然你也可以直接運行 mvn clean install site 運行所有這三套生命周期。
每套生命周期都由一組階段(Phase)組成,我們平時在命令行輸入的命令總會對應於一個特定的階段。
比如,運行 mvn clean,這個clean是Clean 生命周期的一個階段。有 Clean 生命周期,也有 clean階段。
① Clean生命周期:
- pre-clean 執行一些需要在clean之前完成的工作;
- clean 移除所有上一次構建生成的文件;
- post-clean執行一些需要在clean之後立刻完成的工作
② Site生命周期:
- pre-site 執行一些需要在生成站點文檔之前完成的工作;
- site 生成項目的站點文檔;
- post-site 執行一些需要在生成站點文檔之後完成的工作,並且為部署做準備;
- site-deploy 將生成的站點文檔部署到特定的服務器上;
這裏經常使用到的site階段和site-deploy階段,用於生成和發布Maven站點。
③ Default 生命周期
Default生命周期是Maven生命周期中最重要的一個,絕大部分工作都發生在這個生命周期中。
比較重要且常用的階段:
validate
generate-sources
process-sources
generate-resources
process-resources 復制並處理資源文件,至目標目錄,準備打包;
compile 編譯項目的源代碼
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources復制並處理資源文件,至目標測試目錄;
test-compile 編譯測試源代碼
process-test-classes
test 使用合適的單位測試框架運行測試;這些測試代碼不會被打包或部署。
prepare-package
package 接受編譯好的代碼,打包成可發布的格式,如JAR;
pre-integration-test
integration-test
post-integration-test
verify
install 將包安裝至本地倉庫,以讓其他項目依賴;
deploy 將最終的包復制到遠程的倉庫,以讓其他開發人員與項目共享或部署到服務器上運行。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
【6】生命周期與自動化構建
運行任何一個階段的時候,它(同意聲明周期)前面的所有階段都會被運行。
例如我們運行 mvn install 的時候,代碼會被 編譯、測試、打包。這就是Maven為什麽能夠自動執行構建過程的各個環節的原因。
此外 ,Maven的插件機制是完全依賴Maven的生命周期的!
maven生命周期和依賴的範圍