1. 程式人生 > 實用技巧 >Maven 專題(五):Maven核心概念詳解(一)

Maven 專題(五):Maven核心概念詳解(一)

**Maven 的核心程式中僅僅定義了抽象的生命週期,而具體的操作則是由 Maven 的外掛來完成的。**可是 Maven 的外掛並不包含在 Maven 的核心程式中,在首次使用時需要聯網下載。 下載得到的外掛會被儲存到本地倉庫中。本地倉庫預設的位置是:~.m2\repository。 如果不能聯網可以使用我們提供的 RepMaven.zip 解壓得到。

1 約定的目錄結構:

約定的目錄結構對於 Maven 實現自動化構建而言是必不可少的一環,就拿自動編譯來說,Maven 必須 能找到 Java 原始檔,下一步才能編譯,而編譯之後也必須有一個準確的位置保持編譯得到的位元組碼檔案。 我們在開發中如果需要讓第三方工具或框架知道我們自己建立的資源在哪,那麼基本上就是兩種方式:

①通過配置的形式明確告訴它
②基於第三方工具或框架的約定 Maven 對工程目錄結構的要求就屬於後面的一種。

現在 JavaEE 開發領域普遍認同一個觀點:約定>配置>編碼。意思就是能用配置解決的問題就不編碼, 能基於約定的就不進行配置。而 Maven 正是因為指定了特定檔案儲存的目錄才能夠對我們的 Java 工程進行 自動化構建。

2 POM


Project Object Model:專案物件模型。將 Java 工程的相關資訊封裝為物件作為便於操作和管理的模型。 Maven 工程的核心配置。可以說學習 Maven 就是學習 pom.xml 檔案中的配置。

3 座標:

3.1 幾何中的座標

[1]在一個平面中使用 x、y 兩個向量可以唯一的確定平面中的一個點。
[2]在空間中使用 x、y、z 三個向量可以唯一的確定空間中的一個點。

3.2 Maven 的座標

使用如下三個向量在 Maven 的倉庫中唯一的確定一個 Maven 工程。
[1]groupid:公司或組織的域名倒序+當前專案名稱
[2]artifactId:當前專案的模組名稱
[3]version:當前模組的版本

      <groupId>com.atguigu.maven</groupId>  
      <artifactId>Hello</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 

3.3 如何通過座標到倉庫中查詢 jar 包?


[1]將 gav 三個向量連起來

com.atguigu.maven+Hello+0.0.1-SNAPSHOT
1
[2]以連起來的字串作為目錄結構到倉庫中查詢

com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar
1
※注意:我們自己的 Maven 工程必須執行安裝操作才會進入倉庫。安裝的命令是:mvn install

4依賴

Maven 中最關鍵的部分,我們使用 Maven 最主要的就是使用它的依賴管理功能。要理解和掌握 Maven 的依賴管理,我們只需要解決一下幾個問題:

4.1依賴的目的是什麼

當 A jar 包用到了 B jar 包中的某些類時,A 就對 B 產生了依賴,這是概念上的描述。那麼如何在專案 中以依賴的方式引入一個我們需要的 jar 包呢? 答案非常簡單,就是使用 dependency 標籤指定被依賴 jar 包的座標就可以了。

<dependency>
<groupId>com.atguigu.maven</groupId>
<artifactId>Hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>

4.2 依賴的範圍

大家注意到上面的依賴資訊中除了目標 jar 包的座標還有一個scope 設定,這是依賴的範圍。依賴的範 圍有幾個可選值,我們用得到的是:compile、test、provided 三個。 [1]從專案結構角度理解 compile 和 test 的區別

4.3 依賴的傳遞性

4.4 依賴的排除


如果我們在當前工程中引入了一個依賴是 A,而 A 又依賴了 B,那麼 Maven 會自動將 A 依賴的 B 引入當 前工程,但是個別情況下 B 有可能是一個不穩定版,或對當前工程有不良影響。這時我們可以在引入 A 的時 候將 B 排除。
[1]情景舉例

[2]配置方式

<dependency>      
   <groupId>com.atguigu.maven</groupId>     
   <artifactId>HelloFriend</artifactId>     
   <version>0.0.1-SNAPSHOT</version>     
   <type>jar</type>      
   <scope>compile</scope>     
   <!-- 排除不必要的依賴-->
   <exclusions>           
        <exclusion>               
        <groupId>commons-logging</groupId>               
        <artifactId>commons-logging</artifactId>           
        </exclusion>      
   </exclusions> 
</dependency>

[3]排除後的效果

4.5 統一管理所依賴 jar 包的版本

對同一個框架的一組 jar 包最好使用相同的版本。為了方便升級框架,可以將 jar 包的版本資訊統一提 取出來 (與 JSTL 表示式類似)

<properties>      
    <atguigu.spring.version>4.1.1.RELEASE</atguigu.spring.version> 
</properties> 

其中 atguigu.spring.version 部分是自定義標籤。
[2]引用前面宣告的版本號

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

[3]其他用法

<properties>      
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

4.6 依賴的原則:解決 jar 包衝突

————————————————
版權宣告:本文為CSDN博主「DaulFrank」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/qq_43619271/article/details/107067993