天天看點

Maven基礎知識小結。未完待續 。。。。

什麼是Maven?

Maven 譯 ‘專家,行家’, 又是apache下的一個開源項目,相比于SVN(版本控制器)不同,他是一款項目管理工具,Maven也是由java編寫,是以同樣具有跨平台的特點,當然也就需要有JDK的環境支援.

Maven的作用

  • (1) 進行項目建構

    ①高度自動化,跨平台,标準化的 隻有遵守規範才能得到推廣

  • (2 依賴jar包管理

    ①開發一款項目不得不依賴第三方的jar包

  • (3) 依賴資訊管理

    ①自動生成項目資訊

為什麼要使用Maven

  • 在原先的項目中,如果需要用到第三方的jar包,必須有開發人員手動去網上下載下傳(這就會導緻每個人下載下傳的版本不同,内容也可能不同),然後手動在 複制,粘貼到 WEB-INF/lib 下,而且是每一個項目都需要這樣,這樣導緻帶來了:同樣的jar出現在不同的工程中,浪費存儲空間,工程臃腫,而Maven就可以很好的解決這一問題,通過在pom.xml(POM 項目對象模型,可類比之前學過的DOM對象模型,這裡存放工程的核心配置)檔案中添加依賴引用倉庫中的jar來解決;
  • Maven之是以能夠得到推廣,就是因為有一套規範,從中央倉庫下載下傳到本地倉庫的jar都是統一規範的,這樣就不會存在項目工程之間jar包沖突的問題。
  • jar包之間的依賴管理會由Maven自動導入,比如 commons-fileupload.jar --> commons-io.jar在導入commons-fileupload.jar時,maven會幫我們自動導入commons-io.jar(這個我試的時候隻有高版本的jar會自動導入)
  • 擁有生命周期(核心),簡化操作,高度自動化的展現。

Maven倉庫

  • 本地倉庫
  • 遠端倉庫

    中央倉庫

    鏡像倉庫

    私服

    大小排序: 中央>鏡像>私服>本地

    通路速度排序:本地> 私服> 鏡像 >中央

本地倉庫位置

預設位置: ~/.m2/repository/

自定義位置:maven的本地倉庫配置到指定的路徑下,友善管理。在檔案conf–>settings.xml 下修改< localRepository >新的倉庫路徑< /localRepository >

Maven的目錄結構

Maven基礎知識小結。未完待續 。。。。

Maven 的生命周期

Maven有三套互相獨立的聲明周期

  • Clean LifeCycle

    進行真正構件之前進行一些清理工作

  • Default LifeCycle

    構件的核心部分,編譯,測試,打包,部署等等

  • Site LifeCycle

    生成項目報告,站點。

主要說一下Default 生命周期

Maven基礎知識小結。未完待續 。。。。

其中選中的就是我們經常用到的階段,下面就以一個例子說明:

用Maven輸出HelloWorld!

注意: 執行mvn: 必須在pom.xml所在目錄中執行

按照Maven規範目錄将HelloWorld.java 和testHelloWprld.java放在正确的檔案夾下,然後從Dos指令裡面進入Maven項目:

mvn compile --隻編譯main目錄中的java檔案 ,編譯結束後會生成一個target檔案,存 放.class (第一次執行指令時,因為需要下載下傳執行該指令的基礎環境,是以會從中央倉庫下載下傳該環境到本地倉庫,時間很長,耐心等待,不要放棄)

Maven基礎知識小結。未完待續 。。。。

mvn test 測試 同樣也需要下載下傳各種插件,生成.testClass檔案

Maven基礎知識小結。未完待續 。。。。

mvn package 打成jar/war前提是:前面的步驟必須是成功的,(生命周期)

Maven基礎知識小結。未完待續 。。。。
Maven基礎知識小結。未完待續 。。。。
Maven基礎知識小結。未完待續 。。。。

mvn install 将開發的子產品 放入本地倉庫,供其他子產品使用 (放入的位置 是通過gav決定)

Maven基礎知識小結。未完待續 。。。。
Maven基礎知識小結。未完待續 。。。。

mvn clean 删除target目錄(删除編譯檔案的目錄) 該指令既是最後一步,也是第一步。

Maven基礎知識小結。未完待續 。。。。

mvn deploy 該指令是将項目釋出到私服上,供所有區域網路的人使用,但前提是必須配置好私服,這裡就不做展示了。

Maven 指令之是以能運作是因為有下面插件的支援。

Maven基礎知識小結。未完待續 。。。。

Maven的依賴管理

依賴原則:為了防止沖突

a.路徑最短優先原則(很好了解,誰買東西會舍近求遠呢?)

b.路徑長度相同:

i.在同一個pom.xml檔案中有2個相同的依賴(覆寫):後面聲明的依賴 會覆寫前面聲明的依賴 (嚴禁使用本情況,嚴禁在同一個pom中聲明兩個版本不同的依賴)

ii.如果是不同的 pom.xml中有2個相同的依賴(優先):則先聲明的依賴 ,會覆寫後聲明的依賴

依賴管理的自動導入
Maven基礎知識小結。未完待續 。。。。
Maven基礎知識小結。未完待續 。。。。

依賴長度相同:

在Maven_HelloTime下檢視pom.xml

Maven基礎知識小結。未完待續 。。。。
Maven基礎知識小結。未完待續 。。。。

有些人奇怪的是 pom.xml中就沒沒有依賴junit的jar啊,為什麼會導入呢???

這就是依賴傳遞的範圍scope,隻有當scope為compile時,傳遞依賴才會生效

Maven基礎知識小結。未完待續 。。。。

Maven的繼承

  • 統一管理版本
  • 消除重複

繼承實作步驟:

1.建立父工程: 父工程的打包方式為 pom

2.在父工程的pom.xml中編寫依賴:

< dependencyManagement >

< dependencies >

< dependency >

3.子類:

< !-- 給目前工程 繼承一個父工程:

1加入父工程坐标gav

2目前工程的Pom.xml到父工程的Pom.xml之間的 相對路徑

–>

< parent>
 	  <groupId>org.rjxy.maven</groupId>
	  <artifactId>B</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
	  <relativePath>../B/pom.xml</relativePath>
 </parent>
           

4.在子類中 需要聲明 :使用那些父類的依賴

<!-- 聲明:需要使用到父類的junit (隻需要ga) -->
 <dependency>
        <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
</dependency>
           

Maven的聚合

使用聚合的原因

比如 Maven2 依賴于 Maven1,則在執行時:必須先将 Maven1 先加入到本地倉庫(install),之後才能執行Maven2,這點不符合Maven高度自動化的特點。

以上 前置工程的install操作,可以交由“聚合” 一次性搞定 一鍵安裝各個子產品到本地倉庫。。。

聚合的使用

Maven基礎知識小結。未完待續 。。。。

聚合的配置

聚合的配置 隻能配置在(打包方式為pom)的Maven工程中

未完待續 。。。。