maven 小總結

1.maven是什麼?

Maven 是一個項目管理工具,它包含了一個 項目對象模型 (POM:Project Object Model),一組標準集合,一個項目生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命週期階段(phase)中插件(plugin)目標(goal)的邏輯。java

2.Maven 能解決什麼問題?

 

項目開發不只僅是寫寫代碼而已,期間會伴隨着各類必不可少的事情要作,下面列舉幾個感覺一下:web

一、咱們須要引用各類 jar 包,尤爲是比較大的工程,引用的 jar 包每每有幾十個乃至上百個, 每用到一種 jar 包,都須要手動引入工程目錄,並且常常遇到各類讓人抓狂的 jar 包衝突,版本衝突。(jar包依賴)spring

二、咱們辛辛苦苦寫好了 Java 文件,但是隻懂 0 和 1 的白癡電腦卻徹底讀不懂,須要將它編譯成二 進制字節碼。好歹如今這項工做能夠由各類集成開發工具幫咱們完成,Eclipse、IDEA 等均可以將代 碼即時編譯。固然,若是你嫌生命漫長,何不鋪張,也能夠用記事原本敲代碼,而後用 javac 命令一 個個地去編譯,逗電腦玩。(編譯) 三、世界上沒有不存在 bug的代碼,計算機喜歡 bug就和人們老是喜歡美女帥哥同樣。爲了追求美爲 了減小 bug,所以寫完了代碼,咱們還要寫一些單元測試,而後一個個的運行來檢驗代碼質量。(測試) 四、再優雅的代碼也是要出來賣的。咱們後面還須要把代碼與各類配置文件、資源整合到一塊兒,定型 打包,若是是 web項目,還須要將之發佈到服務器,供人蹂躪。(部署)apache

試想,若是如今有一種工具,能夠把你從上面的繁瑣工做中解放出來,能幫你構建工程,管理 jar 包,編譯代碼,還能幫你自動運行單元測試,打包,生成報表,甚至能幫你部署項目,生成 Web 站 點,你會心動嗎?Maven 就能夠解決上面所提到的這些問題。api

3.使用maven,咱們要作哪些工做?

1) 下載Maven緩存

爲了使用 Maven 管理工具,咱們首先要到官網去下載它的安裝軟件。官網地址:tomcat

https://maven.apache.org服務器

2)安裝Mavenapp

Maven 下載後,將 Maven 解壓到一個沒有中文沒有空格的路徑下,好比 D:\software\maven 下面。 解壓後目錄結構以下: bin:存放了 maven 的命令,好比咱們前面用到的mvn tomcat:run boot:存放了一些 maven 自己的引導程序,如類加載器等 conf:存放了 maven 的一些配置文件,如 setting.xml 文件 lib:存放了 maven 自己運行所需的一些 jar 包 至此咱們的 maven 軟件就可使用了,前提是你的電腦上以前已經安裝並配置好了 JDK。webapp

3)配置MAVEN_HOME環境變量

配置 MAVEN_HOME ,變量值就是你的 maven 安裝 的路徑(bin目錄以前一級目錄)

      

上面配置了咱們的 Maven 軟件,注意這個目錄就是以前你解壓 maven 的壓縮文件包在的的目錄,最 好不要有中文和空格。

4)檢查JAVA_HOME環境變量,以下圖:

         

5) 測試Maven是否安裝成功

經過 mvn -v命令檢查 maven 是否安裝成功,看到 maven 的版本爲 3.5.2 及 java 版本爲 1.8 即爲安裝 成功。

找開 cmd 命令,輸入 mvn –v命令,以下圖:

      

咱們發現 maven 的版本,及 jdk 的版本符合要求,這樣咱們的 maven 軟件安裝就成功了。

6) idea 的 的 maven 配置

       

4.什麼是Maven倉庫?

1)Maven 的倉庫分爲兩大類

  • 本地倉庫

  • 遠程倉庫

    中央倉庫:https://mvnrepository.com/(全球惟一,速度比較慢)

    私服:私服是一種特殊的遠程倉庫,它是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網內的 Maven 用戶使用。當 Maven 須要下載構件的時候,它從私服請求,若是私服上不存在該構件,則從外部的遠程倉庫下載,緩存在私服上以後,再爲 Maven 的下載請求提供服務。咱們還能夠把一些沒法從外部倉庫下載到的構件上傳到私服上。(能夠Nexus搭建私服 )

    其它公共庫:例如http://maven.aliyun.com/nexus/content/groups/public,咱們能夠經過配置鏡像的方式來配置。

2)本地倉庫的配置

在 MAVE_HOME/conf/settings.xml 文件中配置本地倉庫位置(maven 的安裝目錄下):

 

         

打開 settings.xml文件,配置以下:

5.Maven工程的標準目錄結構有哪些內容?

Maven 工程的目錄結構

做爲一個 maven 工程,它的 src目錄和 pom.xml 是必備的。 進入 src目錄後,咱們發現它裏面的目錄結構以下:

  • src/main/java —— 存放項目的.java 文件
  • src/main/resources —— 存放項目資源文件,如 spring, hibernate 配置文件
  • src/test/java —— 存放全部單元測試.java 文件,如 JUnit 測試類
  • src/test/resources —— 測試資源文件 target —— 項目輸出位置,編譯後的class 文件會輸出到此目錄
  • pom.xml——maven 項目核心配置文件 注意:若是是普通的 java 項目,那麼就沒有webapp 目錄 

6.Maven 經常使用命令有哪些?

compile

compile 是 maven 工程的編譯命令,做用是將 src/main/java 下的文件編譯爲 class 文件輸出到 target 目錄下。

cmd 進入命令狀態,執行mvn compile,以下圖提示成功:

  • test

    test 是 maven 工程的測試命令 mvn test,會執行src/test/java下的單元測試類。

  • clean

    clean 是 maven 工程的清理命令,執行 clean 會刪除 target 目錄及內容。

  • package

    package 是 maven 工程的打包命令,對於 java 工程執行 package 打成 jar 包,對於web 工程打成war 包。

  • install

    install 是 maven 工程的安裝命令,執行 install 將 maven 打成 jar 包或 war 包發佈到本地倉庫。

    注意事項:當後面的命令執行時,前面的操做過程也都會自動執行。

7.maven工程座標包括哪幾個部分?

 

每一個 maven 工程都須要定義本工程的座標,座標是 maven 對 jar 包的身份定義:

          

groupId:項目名稱,定義爲組織名+項目名,相似包名

artifactId:模塊名稱

version:當前項目版本號,snapshot 爲快照版本即非正式版本,release爲正式發佈版本

packaging:打包類型

jar:執行 package 會打成 jar 包 war:執行 package 會打成 war 包 pom :用於 maven 工程的繼承,一般父工程設置爲 pom

8.Maven常見的依賴範圍有哪些?

添加座標:

        

添加座標時須要指定依賴範圍,依賴範圍包括:

 compile:編譯範圍,指 A在編譯時依賴 B,此範圍爲默認依賴範圍。編譯範圍的依賴會用在 編譯、測試、運行,因爲運行時須要因此編譯範圍的依賴會被打包。

 provided:provided 依賴只有在當 JDK 或者一個容器已提供該依賴以後才使用, provided 依 賴在編譯和測試時須要,在運行時不須要,好比:servlet api 被 tomcat 容器提供。

 runtime:runtime 依賴在運行和測試系統的時候須要,但在編譯的時候不須要。好比:jdbc 的驅動包。因爲運行時須要因此 runtime 範圍的依賴會被打包。

 test:test 範圍依賴 在編譯和運行時都不須要,它們只有在測試編譯和測試運行階段可用, 好比:junit。因爲運行時不須要因此test範圍依賴不會被打包。

 system:system 範圍依賴與 provided 相似,可是你必須顯式的提供一個對於本地系統中 JAR 文件的路徑,須要指定 systemPath 磁盤路徑,system依賴不推薦使用。

         

依賴範圍由強到弱的順序是:compile>provided>runtime>test

9.Maven中出現jar包衝突問題,如何解決?

  • Maven項目中的依賴關係: 直接依賴:A依賴B
  • 間接依賴:A依賴B,B依賴C,A間接依賴C,間接依賴,也稱之爲傳遞性依賴。

問題:若是一個項目,同時依賴另一個jar的不一樣版本,就可能致使jar衝突問題。這就是傳遞性依賴的Jar版本衝突問題。

測試代碼:

<!--導入相關依賴包-->

<dependencies>
    <!--引入spring-context,它因此來的包都會導入進來-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.4.RELEASE</version>
    </dependency>
</dependencies>

當jar出現衝突時,有兩種作法

1)maven根據上面的兩個調解原則,自動處理

2)使用exclusions標籤手動,排除不須要的jar

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.4.RELEASE</version>
        <!--直接排除-->
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
</dependencies>

10.dependencyManagement標籤的做用是什麼?

面對衆多的依賴,有一種方法不用考慮依賴路徑、聲明優化等因素能夠採用直接鎖定版本的方法肯定依賴構件的版本,

版本鎖定後則不考慮依賴的聲明順序或依賴的路徑,以鎖定 的版本的爲準添加到工程中,此方法在企業開發中經常使用。

以下的配置是鎖定了 spring-beans 和 spring-context 的版本:

             

       還能夠把版本號提取出來,使用<properties>標籤設置成變量。

           

注意:在工程中鎖定依賴的版本並不表明在工程中添加了依賴,

若是工程須要添加鎖定版本 的依賴則須要單獨添加<dependencies></dependencies>標籤,以下:

            

上邊添加的依賴並無指定版本,緣由是已在<dependencyManagement>中鎖定了版本, 因此在<dependency>下不須要再指定版本。

11.你是如何理解繼承和聚合的?

一般繼承和聚合同時使用。 何爲繼承? 繼承是爲了消除重複,若是將 dao、service、web 分開建立獨立的工程則每一個工程的 pom.xml 文件中的內容存在重複,好比:設置編譯版本、鎖定 spring的版本的等,能夠將這些重複的 配置提取出來在父工程的 pom.xml 中定義。 何爲聚合? 項目開發一般是分組分模塊開發,每一個模塊開發完成要運行整個工程須要將每一個模塊聚合在 一塊兒運行,好比:dao、service、web 三個工程最終會打一個獨立的war 運行。

12.當下載jar時,因爲斷網或者鏈接超時導

 

當下載jar的時候,若是斷網,或者鏈接超時的時候,會自動在文件夾中建立一個名爲*.lastupdate的文件,當有了這個文件以後,當你再次聯網的時候,那麼該文件不會再自動聯網,必須手動刪除,才能正常下載使用。如何刪除呢?

使用工具:

   

set REPOSITORY_PATH=E:\yycg_repository
rem java5678正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完畢
pause

 

13.pom 基本配置有哪些?

pom.xml 是 Maven 項目的核心配置文件,位於每一個工程的根目錄,基本配置以下:

<project > :文件的根節點 .

<modelversion > : pom.xml 使用的對象模型版本

<groupId > :項目名稱,通常寫項目的域名

<artifactId > :模塊名稱,子項目名或模塊名稱

<version > :產品的版本號 .

<packaging > :打包類型,通常有 jar、war、pom 等

<name > :項目的顯示名,經常使用於 Maven 生成的文檔。

<description > :項目描述,經常使用於 Maven 生成的文檔

<dependencies> :項目依賴構件配置,配置項目依賴構件的座標

<build> :項目構建配置,配置編譯、運行插件等。

相關文章
相關標籤/搜索