清楚認識Maven

一、什麼是Maven?

官網描述:
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.

Maven 是一個軟件(特別是Java軟件)項目管理自動構建工具,由Apache軟件基金會所提供。基於項目對象模型(縮寫:POM) 概念,Maven利用一箇中央信息片斷能管理一個項目的構建、報告和文檔等步驟。

二、特點

1.基於項目對象模型的思想

maven將項目看做一個對象,將項目的相關信息封裝爲對象,便於操作和管理。

maven項目對象的部分基礎屬性:

① 項目座標

項目座標用來定位一個項目在倉庫中的位置。包含groupId, artifactId, version。一個Maven座標是一個地址。當一個項目通過依賴,插件或者父項目引用和另外一個項目關聯的時候,Maven通過座標來精確定位一個項目。

② 打包方式。

這個屬性決定我們執行maven的package方法後,項目會被打包成什麼文件。

③ 其他屬性
如編碼方式等。

④ 項目依賴列表。

這個屬性的值是一個數組,裏邊有一些其他項目的座標。

⑤ 構建插件列表。

這個屬性是一個數組,定義項目需要的一些插件,比如源碼打包工具、web容器。

maven項目對象的部分方法:

①mvn compile 編譯項目

②mvn package 打包項目

③mvn clean 清除之前編譯和打包產生的文件

④mvn install 將項目安裝到本地倉庫

⑤mvn test 運行測試代碼

三、作用

1. 項目管理

  1. 項目信息管理
  2. 統一開發規範與工具
  3. 統一jar包管理

2. 自動構建

構建:從源碼到成品(通常是jar包或war包的形式)的過程。
構建環節:

環節 功能
清理 將以前編譯得到的class字節碼文件刪除,爲下一次編譯做準備
編譯 將java源程序編程成class字節碼文件
測試 自動測試,自動調用Junit程序
報告 測試程序執行的結果
打包 動態web工程打包war包,java工程打jar包
安裝 將打包得到的文件複製到"倉庫"中的指定位置
部署 將動態web工程生成的war包複製到servlet容器的指定目錄下,使其可以運行

這些環節,maven都可以一個命令完成,即自動構建。

四、使用

1.下載

官網下載地址:http://maven.apache.org/download.cgi
選擇 Binary zip 類型的版本
在這裏插入圖片描述
下載完成後,解壓。

2. 配置maven環境變量

在環境變量–>系統變量–>path中,加入maven安裝目錄下的bin目錄路徑。

測試安裝成功:cmd中執行mvn -v
在這裏插入圖片描述
出現maven版本信息,即爲安裝成功。

3. 修改配置文件

maven 以倉庫的形式管理jar包,倉庫分爲中央倉庫(瀏覽器可訪問https://mvnrepository.com/),和本地倉庫。

本地倉庫方便離線使用,從中央倉庫下載的jar包都會放到本地倉庫。

maven默認本地倉庫目錄放在c盤,爲了方便查看以及減少C盤負荷,我們需更改本地倉庫位置:

  • 一般在maven安裝目錄旁邊創建一個local文件夾

在這裏插入圖片描述

  • 修改maven/conf/setting.xml配置文件,爲了避免出錯,修改前複製一個副本。
    在這裏插入圖片描述
    在 Setings 便籤裏面添加一條:
<localRepository>D:\E\Maven\local</localRepository>

在這裏插入圖片描述
在原文件中的 53 行有localRepository配置,但被註釋掉了,我們可以將其複製到註釋外面,然後修改其值。

  • 修改鏡像
    修改mirrors,在標籤下加入以下配置,啓動阿里雲的鏡像
	<mirror> 
      <id>alimaven</id> 
      <name>aliyun maven</name> 
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 
      <mirrorOf>central</mirrorOf>         
   	</mirror> 

在這裏插入圖片描述

4. 簡單運行

mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.chinasofti.build -DartifactId=demo

創建一個maven項目,項目groupId 爲com.chinasofti.build,artifactId爲 demo。

mvn clean compile exec:java -Dexec.mainClass=“com.chinasofti.build.App”

編譯項目(在編譯前,需先清理項目)

最後的項目結構:
在這裏插入圖片描述

src 下放的是源碼
target 下放的是編譯文件

五. 完整項目目錄結構


在這裏插入圖片描述
②、爲什麼 maven 工程的目錄結構要這樣呢?

1、Maven 要負責項目的自動化構建,以編譯爲例,Maven 要想自動進行編譯,那麼它必須知道 Java 的源文件保存在哪裏,這樣約定之後,不用我們手動指定位置,Maven 能知道位置,從而幫我們完成自動編譯。

2、遵循 約定>>>配置>>>編碼。即能進行配置的不要去編碼指定,能事先約定規則的不要去進行配置。這樣既減輕了勞動力,也能防止出錯。

③、pom.xml 文件

Project Object Model 項目對象模型,Maven 的核心配置文件,pom.xml,與構建過程相關的一切設置都在這個文件中進行配置。

六、構建的生命週期

1. 概念?

maven對構建(build)的過程進行了抽象和定義,這個過程被稱爲構建的生命週期(lifecycle)。

生命週期(lifecycle)由多個階段(phase)組成,每個階段(phase)會掛接一到多個goal。

goal是maven裏定義任務的最小單元,相當於ant裏的target。 可以理解maven爲一個插件的容器,每個插件綁定到某個goal執行。

2.生命週期內容

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

七、座標與依賴

1.座標詳解

<dependency>
	<groupId>net.sf.json-lib</groupId>
	<artifactId>json-lib</artifactId>
	<version>2.4</version>
	<type>jar</type>
	<classifier>jdk15</classifier>
</dependency>
標籤 解釋
dependency 表示要使用一個依賴
groupId 指定依賴的組織名
artifactId 指定依賴的項目名
version 指定依賴的版本名
type 指定依賴的類型
classifier 指定jdk版本

2. 依賴範圍

  • compile:編譯時依賴在所有階段都可獲得,這是默認值。
  • provided:提供的依賴範圍用來編譯應用程序,但無需部署。若你用到jdk或者應用服務器提供的JAR,則使用此範圍,servlet APIs就屬於這個依賴範圍。測試時,此依賴範圍也加入到classpath。
  • runtime:運行依賴範圍在編譯階段是不需要的,只有在運行時需要,比如JDBC驅動程序。
  • test:測試範圍依賴,僅在編譯和運行單元測試時需要(比如Junit)。
  • system 本地依賴,不建議使用。(nexus)
    在這裏插入圖片描述

3.依賴傳遞

Only compile and runtime scopes are transitive
A->B->C
簡單傳遞依賴:A->C
A->B-C(0.1)
A->C(0.2)
最短路徑優先原則: A->C(0.2)
A->B->C(0.1)
A->E->C(0.2)
第一聲明優先原則:最終依賴C(0.1)

4.依賴歸類

  <properties>
    <spring.version>2.5</spring.version>
  </properties>
  <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
      </dependency>
   </dependencies>

5.依賴排除

<dependency>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-validator</artifactId>
       <version>4.3.1.Final</version>
       <exclusions>
            <exclusion>
                <artifactId>slf4j-api</artifactId>
                <groupId>org.slf4j</groupId>
            </exclusion>
       </exclusions>
</dependency>

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