1. 程式人生 > 其它 >Maven學習筆記含下載安裝配置過程

Maven學習筆記含下載安裝配置過程

前言

隨著學習的深入,傳統的使用手動導包等操作逐漸已經不能滿足我們了,所以我們就要學習Maven。百度一下maven。emmmm。有點看不懂,但是大概可以瞭解到Maven應該是一個幫助構建專案的東東。

一、什麼是Maven,Maven的作用

1. 傳統開發專案的問題,沒有使用maven 管理的專案痛點。

  1. 很多模組,模組之間有關係, 手工管理關係,比較繁瑣。
  2. 需要很多第三方功能, 需要很多jar檔案,需要手工從網路中獲取各個jar
  3. 需要管理jar的版本, 你需要的是mysql.5.1.5.jar 拿你不能給給一個mysql.4.0.jar
  4. 管理jar檔案之間的依賴, 你的專案要使用a.jar 需要使用b.jar裡面的類。 必須首先獲取到b.jar才可以, 然後才能使用a.jar.
    ps:a.jar需要b.jar這個關係叫做依賴, 或者你的專案中要使用mysql的驅動, 也可以叫做專案依賴mysql驅動。
    a.class使用b.class, a依賴b類

2. 使用maven構建專案優點

  1. maven可以管理jar檔案
  2. 自動下載jar和他的文件,原始碼
  3. 管理jar直接的依賴, a.jar需要b.jar , maven會自動下載b.jar
  4. 管理你需要的jar版本
  5. 幫你編譯程式,把java編譯為class
  6. 幫你測試你的程式碼是否正確。
  7. 幫你打包檔案,形成jar檔案,或者war檔案
  8. 幫你部署專案

二、 Maven 下載安裝

1.Maven下載可以直接到Maven官網下載即可:https://maven.apache.org/download.cgi
windows下載如下:

2.下載完畢後選中一個你要安裝的目錄解壓即可。Ps:路徑儘量不要有中文。

3.在使用前需要配置環境變數:
在系統的環境變數中,指定一個M2_HOME的名稱, 指定它的值是maven工具安裝目錄,bin之前的目錄。
步驟:檔案資源管理器-->此電腦,右鍵選擇屬性-->高階系統設定

4.然後選擇環境變數:選擇新建:

5.然後名稱輸入:M2_HOME
路徑輸入:下載maven後解壓路徑

6.然後再選中系統環境變數Path,點選編輯

7.然後進行新建-->輸入:%M2_HOME%\bin 最後點選儲存即可

8.然後再進入到cmd,輸入mvn -v
如何出現瞭如下情況,說明沒有配置JAVA_HOME目錄,應該先配置這個JAVA_HOME目錄

9.然後以下步驟就是很上面新增M2_HOME步驟類似

10.然後進行如下圖操作

11.最後點選確認即可,然後進入cmd,輸入mvn -v,如果有如下顯示,則證明配置成功了。PS:記得配置完了一定要重新開啟cmd

如果有以上的顯示,我們的maven就配置完成啦啦啦啦!!!!

三、如何使用maven

1.構建自己的本地倉庫

倉庫可以分為:
遠端倉庫主要分為三大類,分別是:中央倉庫(最權威倉庫)、私服(公司自己搭建的私人伺服器)和其他倉庫。
本地倉庫: 就是你的個人計算機上的資料夾,存放各種jar
遠端倉庫: 在網際網路上的,使用網路才能使用的倉庫
①:中央倉庫,最權威的, 所有的開發人員都共享使用的一個集中的倉庫,

https://repo.maven.apache.org :中央倉庫的地址
②:中央倉庫的映象:就是中央倉庫的備份, 在各大洲,重要的城市都是映象。
③:私服,在公司內部,在區域網中使用的, 不是對外使用的。

構建自己的本地倉庫步驟:
修改設定本機存放資源的目錄位置(設定本機倉庫):
1. 修改maven的配置檔案, maven安裝目錄/conf/settings.xml
2. 修改 指定你的目錄(不要使用中文目錄)

其中再使用Maven時,呼叫的優先順序為:
maven首先查本地倉庫如果有,就直接呼叫本地倉庫裡的jar包,如何本地倉庫沒有,就到公司私人伺服器裡面去呼叫,如果這裡面也沒有,就直接到中央倉庫映象去呼叫,如果映象裡面沒有,就直接到中央倉庫裡面去呼叫。
PS:在本地倉庫沒有的時候,去調其他的倉庫。最後也會下載一份到本地倉庫,下次再呼叫這個的時候,就不需要去其他地方呼叫。
maven呼叫優先順序:
本地倉庫--->私服--->映象--->中央倉庫

2.學習使用Maven之約定大於配置

Maven 約定了自己獨特的本地目錄結構,Maven專案的目錄結構的約定如下所示:

專案/
	  ---/src
	  ------/main           #放你主程式java程式碼和配置檔案
	  ----------/java       #你的程式包和包中的java檔案
	  ----------/resources  #你的java程式中要使用的配置檔案

	  ------/test  #放測試程式程式碼和檔案的(可以沒有)
	  ----------/java       #測試程式包和包中的java檔案
	  ----------/resources  #測試java程式中要使用的配置檔案

	  ---/pom.xml  #maven的核心檔案(maven專案必須有)

以上就是Maven約定規則,要求我們這樣做,並不是強制的,不這樣也是可以的。但是作為乖寶寶的我們,最好還是按照別人的要求來,畢竟別人這麼設計肯定是有好處的呀。

maven核心概念

①POM : 一個檔案 名稱是pom.xml , pom翻譯過來叫做專案物件模型。 maven把一個專案當做一個模型使用。控制maven構建專案的過程,管理jar依賴。
②約定的目錄結構 : maven專案的目錄和檔案的位置都是規定的。
③座標 : 是一個唯一的字串,用來表示資源的。這個概念很重要,我們平時使用Maven主要是通過座標來定位到我們所用的資源。 座標:唯一值, 在網際網路中唯一標識一個專案的
④依賴管理 : 管理你的專案可以使用jar檔案
⑤倉庫管理(瞭解) :你的資源存放的位置
⑥生命週期 (瞭解) : maven工具構建專案的過程,就是生命週期。
⑦外掛和目標(瞭解):執行maven構建的時候用的工具是外掛
⑧繼承
⑨聚合

pom.xml檔案的學習

pom.xml檔案作為Maven使用中最重要的一個檔案,我們平時的使用就是在這個檔案中通過新增依賴來實現依賴的引入。下面我們來一起學習一個pom.xml檔案

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <!-- 自己專案的座標(gav)-->
  <!--公司域名的倒寫-->
  <groupId>com.test.www</groupId>
  <!--自定義專案名稱-->
  <artifactId>test</artifactId>
  <!--自定版本號-->
  <version>1.0</version>
  <!--幫你打包檔案,形成jar檔案,java程式碼預設字尾為jar,或者war檔案,Web程式碼預設字尾為war-->
  <packaging>jar</packaging>
<!--properties:設定屬性-->
  <properties>
    <!--maven構建專案使用的是utf-8 ,避免中文的亂碼-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--編譯java程式碼使用的jdk版本-->
    <maven.compiler.source>1.8</maven.compiler.source>
    <!--你的java專案應該執行在什麼樣的jdk版本-->
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <!--依賴-->
  <dependencies>
    <!--新增啥依賴就到這裡新增啥座標,座標到 https://mvnrepository.com/網站搜尋就可以了-->
    <!--單元測試-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

使用示例:引入單元測試依賴

使用步驟:
1.加入依賴,在pom.xml加入單元測試依賴

	  <!-- 單元測試 -->
		 <dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
  1. 在maven專案中的src/test/java目錄下,建立測試程式。
    推薦的建立類和方法的提示:
    1.測試類的名稱 是Test + 你要測試的類名
    2.測試的方法名稱 是:Test + 方法名稱

    例如你要測試HelloMaven ,
    建立測試類 TestHelloMaven

       @Test
		 public void testAdd(){
          測試HelloMaven的add方法是否正確
		 }
	 其中testAdd叫做測試方法,它的定義規則
	 1.方法是public的,必須的
	 2.方法沒有返回值, 必須的
	 3.方法名稱是自定義的,推薦是Test + 方法名稱
	 4.在方法的上面加入 @Test
  1. mvn compile
    編譯main/java/目錄下的java 為class檔案, 同時把class拷貝到 target/classes目錄下面
    把main/resources目錄下的所有檔案 都拷貝到target/classes目錄下

3.在idea中設定maven

idea中內建了maven ,一般不使用內建的, 因為用內建修改maven的設定不方便。
使用自己安裝的maven, 需要覆蓋idea中的預設的設定。讓idea指定maven安裝位置等資訊

配置的入口

①:配置當前工程的設定, file-->settings --->Build, Excution,Deployment-->Build Tools -->Maven
Maven Home directory: maven的安裝目錄
User Settings File : 就是maven安裝目錄conf/setting.xml配置檔案
Local Repository : 本機倉庫的目錄位置
1.Build Tools--Maven--Runner
VM Options : archetypeCatalog=internal
JRE: 你專案的jdk
2. archetypeCatalog=internal , maven專案建立時,會聯網下載模版檔案, 比較大, 使用-DarchetypeCatalog=internal,不用下載, 建立maven專案速度快。
3. 配置以後新建工程的設定, file--other settings--Settings for New Project
4.使用模版建立專案選項
1)maven-archetype-quickstart : 普通的java專案
2)maven-archetype-webapp : web工程

4.scope依賴範圍的學習

Maven 專案的構建。

構建是面向過程的,就是一些步驟,完成專案程式碼的編譯,測試,執行,打包,部署等等。
maven支援的構建包括有:
1. 清理, 把之前專案編譯的東西刪除掉,我新的編譯程式碼做準備。
2 .編譯, 把程式原始碼編譯為執行程式碼, java-class檔案批量的,maven可以同時把成千上百的檔案編譯為class。javac 不一樣,javac一次編譯一個檔案。
2. 測試, maven可以執行測試程式程式碼,驗證你的功能是否正確.批量的,maven同時執行多個測試程式碼,同時測試很多功能。
3. 報告, 生成測試結果的檔案, 測試通過沒有。
4. 打包, 把你的專案中所有的class檔案,配置檔案等所有資源放到一個壓縮檔案中。這個壓縮檔案就是專案的結果檔案, 通常java程式,壓縮檔案是jar副檔名的。
ps:對於web應用,壓縮副檔名是.war
5. 安裝, 把5中生成的檔案jar,war安裝到本機倉庫
6. 部署, 把程式安裝好可以執行。

依賴範圍, 使用scope表示的。

scope的值有 compile, test, provided ,預設是compile
scope:表示依賴使用的範圍,也就是在maven構建專案的那些階段中起作用。
maven構建專案 編譯, 測試 ,打包, 安裝 ,部署 過程(階段)
具體作用,百度吧。

5.maven常用操作

1.maven的屬性設定
設定maven的常用屬性
2.maven的全域性變數
自定義的屬性,1.在 通過自定義標籤宣告變數(標籤名就是變數名)
2.在pom.xml檔案中的其它位置,使用 ${標籤名} 使用變數的值
PS:自定義全域性變數一般是定義 依賴的版本號, 當你的專案中要使用多個相同的版本號,先使用全域性變數定義, 在使用${變數名}

3.資源外掛

  <build>
	<resources>
	<resource>
	<directory>src/main/java</directory><!--所在的目錄-->
	<includes><!--包括目錄下的.properties,.xml 檔案都會掃描到-->
	<include>**/*.properties</include>
	<include>**/*.xml</include>
	</includes>
	<!—filtering 選項 false 不啟用過濾器, *.property 已經起到過濾的作用了 -->
	<filtering>false</filtering>
	</resource>
	</resources>
  </build>

作用: 把java目錄下的檔案下的xml檔案和properties檔案都打包拷貝到target/classes目錄下,不加以上的語句,預設只拷貝java檔案