1. 程式人生 > >maven生命周期和依賴的範圍

maven生命周期和依賴的範圍

當前 mpi size all sso clean 同時 sdn def

轉載: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生命周期和依賴的範圍