Maven入門篇(下)

上一篇博文寫了怎麼安裝配置和怎麼在myeclipse裏面使用maven,我的宗旨是先得會用,然後再去深入探究其核心內容。所以這篇文章在前一篇的基礎上講講maven更深入的東西,主要介紹幾個我們經常接觸到的概念。

Maven 庫

首次運行maven的時候,它會從 maven 默認的遠程庫(http://search.maven.org/) 下載的相關jar包。(注意一點,一般大公司都有自己定製的jar,所以並不是所有的包都是從這個默認庫下載的)

POM (Project Object Model)

一個項目所有的配置都放置在 POM 文件中:定義項目的類型、名字,管理依賴關係,定製插件的行爲等等。比如說,你可以配置 compiler標籤,讓它使用 java 1.7來編譯。
在 pom.xml中,groupId, artifactId, packaging, version稱爲maven的座標,它能唯一的確定一個項目。有了 maven座標,我們就可以用它來指定我們的項目所依賴的其他項目,插件,或者父項目。
大項目一般會分成幾個子項目。在這種情況下,每個子項目就會有自己的 POM 文件,然後它們會有一個共同的父項目。這樣只要構建父項目就能夠構建所有的子項目了。子項目的 POM會繼承父項目的 POM。
Maven依賴管理
在 POM 中,依賴關係是在 dependencies部分中定義的。比如前一篇博文中,示例默認建了一個對junit的依賴,如下
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

這個例子很簡單,但是實際開發中我們會有複雜得多的依賴關係,因爲被依賴的 jar文件會有自己的依賴關係。那肯定有人會和我一樣要問,那那些間接依賴的 jar文件怎麼辦?

不用擔心,因爲 maven 提供了傳遞依賴的特性,即 maven會檢查被依賴的 jar 文件,把它的依賴關係納入最終的依賴鏈中,也就是我們上面說的pom的依賴。這種依賴,在myeclipse裏面還能以圖形界面顯示出來(打開pom文件的dependency Graph視角)。

這裏我無意中發現了個網站(好像是在github上找某個開源軟件源碼和jar的時候找到的),http://mvnrepository.com/ 這裏可以看到每個jar依賴的jar,同時還可以下自己想要的jar包(強烈鄙視那些把jar傳到CSDN還要分的人!)
maven官網現在也也提供這個功能了,所以新手看哪個方便就用哪個吧。

在 POM 的 dependencies 部分中,scope 決定了依賴關係的適用範圍。我們的例子中 junit 的 scope 是 test,那麼它只會在執行 compiler:testCompile and surefire:test 目標的時候纔會被加到 classpath 中,在執行 compiler:compile 目標時是拿不到 junit 的。
我們還可以指定 scope 爲 provided,意思是 JDK 或者容器會提供所需的jar文件。比如說在做web應用開發的時候,我們在編譯的時候需要 servlet API jar 文件,但是在打包的時候不需要把這個 jar 文件打在 WAR 中,因爲servlet容器或者應用服務器會提供的。
scope 的默認值是 compile,即任何時候都會被包含在 classpath 中,在打包的時候也會被包括進去。

參考:http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-2-405568-zhs.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章