Maven的相關知識及使用

1、簡介

maven:
  是apache下的一個開源項目,是純java開發,而且只是用來管理java項目的,Maven是跨平臺的項目管理工具。java

  1.自動化構建和項目管理工具程序員

      Ant→Make→Maven→Gradlespring

  2.Maven概述apache

    ①讀音:妹文、麥文api

    ②Maven做用一:自動化構建tomcat

    ③Maven做用二:依賴管理[多了重複、少了報錯]服務器

    ④Maven做用三:項目信息管理maven

  3.自動化構建ide

    ①構建[build]:將程序員編寫的代碼從源文件到服務器部署的整個過程。工具

        清理→編譯→測試→報告→打包→部署→運行……

    ②自動化構建:將構建過程當中的各個操做步驟交給構建工具自動完成。

  4.Maven的好處?

        節省空間

        就是對jar包的統一管理就是對jar包的統一管理,依賴管理

        一鍵構建,

        可跨平臺

  5.Maven的用途 

      ①項目構建:項目構建指的是程序模塊從清理、編譯直到部署的整個過程。

                                                  

      ②依賴管理:Maven可以提供自動的依賴管理,將所須要的JAR自動導入到工程中,根據既定的規則很好的解決JAR包之間的衝突。

      ③項目信息管理:Maven可以提供高質量的項目信息,包括依賴關係、測試報告、站點信息等詳細內容,並自動生成靜態頁面,拷貝到服務器上就能夠直接使用。

2、Maven的配置

    ①要求當前系統環境下配置了JAVA_HOME

      在CMD命令行中輸入:echo %JAVA_HOME% 若是能出來JDK的安裝目錄,說明咱們配置了JAVA環境

    ②將Maven的ZIP壓縮包解壓到一個非中文無空格目錄下【maven.apache.org官方網站下載jar包】

      apache-maven-3.3.9-bin.zip

    ③.配置環境變量,用mvn -v查看是否正確配置了maven【要配置jdk, maven3.3.9這個版本所需的jdk版本必需要1.7以上】

 

M2_HOME:

    D:\DevSoft\apache-maven-3.3.9

path:
    %M2_HOME%\bin;

mvn -v查看maven版本

    ④.先了解一下maven的目錄結構:
        projectname
          -src
            -main
              -java
                -package
              -resources【配置文件或者說資源文件】
            -test
              -java
                -package
              -resources
          pom.xml

    按照上面的maven的目錄結構建立一個maven項目,參照word文檔!

    ⑤當針對某個Maven工程執行諸如「編譯」、「測試」、「打包」、「部署」等命令時,須要進入到pom.xml所在的目錄下執行。

          mvn compile

 

3、maven的幾個概念:

  1.座標

    ①數學座標:平面中使用橫縱兩個座標系能夠惟一的定位平面中的任何一個點。

      向量x:橫座標

      向量y:縱座標

    ②使用三個向量在Maven倉庫中惟一的定位一個Maven工程。

      向量groupid:公司或組織的名稱+項目名稱

      向量artifactId:模塊名稱

      向量version:模塊版本

        <groupId>com.neuedu.maven</groupId>

        <artifactId>Hello</artifactId>

        <version>0.0.1-SNAPSHOT</version>

    ③如何根據座標zhao到倉庫中查找對應的Maven工程

      座標

        <groupId>org.springframework</groupId>

        <artifactId>spring-core</artifactId>

        <version>4.0.0.RELEASE</version>

      倉庫中的路徑

          org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar

    ④如何查找指定jar包的座標:

      1.從maven倉庫下載

        http://search.maven.org/

        http://mvnrepository.com/【建議使用這個】

4、倉庫

  ①做用:保存Maven工程

  ②分類

    [1]本地倉庫:爲當前電腦上全部Maven工程服務【本地倉庫的配置只須要修改settings.xml文件就能夠】

    [2]遠程倉庫[私服]:爲當前局域網中的全部Maven工程服務器,公司維護

    [3]中央倉庫:爲全世界全部的Maven工程服務

    [4]中央倉庫的鏡像:內容和中央倉庫同樣,架設在全世界各個大洲,讓Maven用戶能夠就近獲取須要的Maven資源,同時也可以減輕中央倉庫的壓力。

  ③jar包的查找過程

      首先在本地倉庫中查找,若是找不到就到局域網中的私服中去找,還找不到就鏈接中央倉庫或鏡像。從中央倉庫或鏡像中找到後,若是局域網中架設了私服,就保存到私服上,

    下次同一局域網中的其餘用戶直接從私服上下載便可,沒必要鏈接中央倉庫或鏡像了。若是局域網中沒有架設私服,則保存在本地倉庫中。

  ④Maven工程分類

      [1]Maven用戶本身開發的工程

      [2]Maven的插件

      [3]使用Maven構建獲得的第三方jar包

 

  ⑤能夠修改Maven默認的本地倉庫路徑,使其指向一個提早下載好的目錄

    配置文件路徑

      Maven解壓目錄/conf/settings.xml

    修改

      <localRepository>D:\Maven\Repository</localRepository>

 

 

5、生命週期

    clean 刪除target目錄

      compile 編譯

      test 測試,先執行compile,再執行test

      package 打包(並將jar包放入到target的目錄中),先執行compile,而後執行test,最後執行package

      install 安裝jar包到本地倉庫中

      mvn deploy

    site 生成一個站點,先執行compile,而後執行test,而後執行package,最後執行site

  ①Maven爲了可以將構建過程自動化處理,定義了三個主要的生命週期。其中定義了相關的構建過程。

  ②三個生命週期

    [1]清理週期clean

    [2]站點週期site

    [3]默認週期default

  ③最重要的特色:每一個生命週期中執行任何一個操做,都是從這個生命週期最初的位置開始執行,直到到達命令指定的位。

6、依賴管理

  一、使用座標引用依賴的項目

      依賴聲明主要包含以下元素:

1          <dependencies>
2                <dependency>
3                      <groupId>junit</groupId>
4                      <artifactId>junit</artifactId>
5                      <version>4.10</version>
6                      <scope>test</scope>
7                </dependency>
8          </dependencies>

  二、依賴方式

      [1]在pom.xml配置文件中使用dependencies/dependency元素配置依賴信息

      [2]經過目標jar包的座標找到被依賴的文件

  三、依賴範圍

    在依賴聲明中,scope標籤指定的就是當前項目在什麼狀況下對目標項目有依賴。可選值包括:compile、test、provided、runtime等

      1.默認compile:當前所依賴的jar包是當前Maven工程中全部類都須要使用的,最終也須要參與打包。

      2.test:只是當前工程中的測試類須要,最終不參與打包。

      3.provided:當工程在服務器上運行起來後,能夠由服務器提供,因此也只是在開發或測試時使用,部署到服務器上時就不須要。

                                                

  一個本身開發的Maven工程,須要執行「安裝」命令,纔可以被放入到倉庫中。

  四、依賴複雜性
    [1]路徑最短者優先
        MakeFriends --------> HelloFriends----------->Hello
                    |                              |
                   log4j.2.1.14          log4j.2.1.17

    [2]路徑相同時,先聲明者優先
        MakeFriends --------> HelloFriends ------>log4j.2.1.14
                    |
             -------------->OurFriends ------->log4j.2.1.12


  五、版本衝突的解決方案

    [1]調節原則:

        [1]路徑最短者優先原則

        [2]路徑相同時,先聲明者優先原則

    [2]排除原則

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
<!--這裏不須要指定版本號 -->
</exclusion>
</exclusions>
<scope>provided</scope>
</dependency>

    [3]版本鎖定原則

<dependencyManagement>
<dependencies>
<dependency>
<!--jar包座標 -->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
</dependencyManagement>

    版本鎖定以後,後面再使用到這個的 依賴的時候,就不要寫版本號了!

    並且若是有多個相同的須要鎖定的jar包的版本號一致的話,咱們能夠單獨提取到properties標籤中,

    在properties標籤中,子標籤本身定義,標籤的值就是版本號,下面只須要在依賴的地方用${}引用就能夠了!

7、繼承

    ①目的一:將pom.xml文件中重複的信息統一提取到父工程中,簡化pom.xml中的配置

    ②目的二:將各個子工程都須要依賴的jar包提取到父工程中統一管理

    ③注意:父工程打包的方式——pom,表示這是一個管理其餘工程的工程

        < packaging>pom</ packaging>

    ④指定當前工程的父工程

      <parent >

          <groupId>com.atguigu.maven</groupId>

          <artifactId>Parent</artifactId>

          <version>0.0.1-SNAPSHOT</version>

        <!-- 如何經過當前工程的pom.xml文件找到父工程的pom.xml文件 -->

        <!-- 配置父工程的pom.xml文件相對於當前工程pom.xml文件的相對路徑 -->

          <relativePath> ../Parent/pom.xml</relativePath >

      </parent >

    在tomcat運行一遍,用插件運行一遍

  解決-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

    1.添加M2_HOME的環境變量

    2.Preference->Java->Installed JREs->Edit 選擇一個jdk,

      添加 -Dmaven.multiModuleProjectDirectory=$M2_HOME

  繼承練習:

 

①新建Maven項目Parent

 

②修改Parent/pom.xml的<packaging>jar</packaging>爲<packaging>pom</packaging>,代表這不是一個普通的Java工程或Web工程,而是管理其餘Maven工程的工程。

 

③刪除子項目中的重複內容,提取依賴信息

 

④在子項目POM中,添加

 

<parent>

 

    <groupId>...</groupId>

 

         <artifactId>...</artifactId>

 

         <version>...</version>

 

         <relativePath>從當前目錄到父項目的pom.xml文件的相對路徑</relativePath>

 

</parent>

 

注意:此時若是安裝某個項目報錯,則是由於Parent工程沒有安裝

 

⑤發現子項目中依賴的包和項目有問題

 

⑥將Parent項目中的dependencies標籤,用dependencyManagement標籤括起來

 

⑦在子項目中從新指定須要的依賴,刪除範圍和版本號

相關文章
相關標籤/搜索