Maven 入門篇

要想人前顯貴,必要人後受罪

Maven 介紹

1.爲什麼要使用 Maven?

由於 Java 的生態非常豐富,無論你想實現什麼功能,都能找到它對應的工具類,這些工具類都是以 jar 包的形式出現的,例如 Spring、SpringMVC、數據庫驅動等等,jar 包之間會有關聯,在使用一個依賴之前,還需要確定這個依賴所依賴的其他依賴,所以當項目比較大的時候,依賴管理是非常麻煩的事情。

2.Maven 是什麼?

Maven 是一個項目管理工具,全稱是項目對象模型 (Project Object Model),反映在配置中,就是一個 pom.xml 文件,是一組標準集合,一個項目的生命週期,一個依賴管理系統,另外還包括定義在項目生命週期階段的插件 (plugin) 以及目標 (goal)。
Maven 有兩大核心:

  • 依賴管理:對 jar 的統一管理,Maven 提供了一箇中央倉庫,當我們在項目中添加過依賴後,Maven 會自動去中央倉庫下載相關的依賴,並且解決依賴的依賴問題。
  • 項目構建:對項目進行編譯、測試、打包、部署、上線到私服等

Maven 安裝

  • Maven 是 Java 項目,因此需要先安裝 JDK。檢查自己是否配置了 JDK ,執行以下命令。
    在這裏插入圖片描述

  • 下載 Maven:
    下載地址:http://maven.apache.org/download.cgi
    在這裏插入圖片描述

  • 解壓並配置環境變量
    在這裏插入圖片描述

  1. 配置 MAVEN_HOME:
    在這裏插入圖片描述
  2. 編輯環境變量 PATH:
    在這裏插入圖片描述
  3. 檢驗安裝是否成功
    cmd 命令行輸入 mvn -v ,如下圖代表成功:
    在這裏插入圖片描述

Maven 配置

實際上,沒有特殊要求,安裝好就能直接使用的哈,一般來說,還是需要修改一下配置文件的,比如默認使用 Maven 的中央倉庫網速比較慢,這種網速問題可以通過修改配置文件解決的,將倉庫改成阿里巴巴的鏡像站即可。

1.倉庫類型

倉庫類型 說明
本地倉庫 就是你自己電腦上的倉庫,默認位置在當前用戶名\ .m2\repository
私服倉庫 一般來說這個是公司內部搭建的 Maven 私服,處於局域網種,訪問速度較快,這個倉庫種存放的 jar 一般就是公司內部自己開發的 jar
中央倉庫 有 Apache 團隊來維護,包含了大部分的 jar ,早期不包含 Oracle 數據庫驅動,從 2019年8月開始,包含了 Oracle 驅動

假如現在3個倉庫同時存在,那麼 jar 包如何查找?如下圖所示
在這裏插入圖片描述

2.本地倉庫設置

本地倉庫默認位置是在 當前用戶名.m2\repository ,這個位置可以自定義,但是不建議更改,雖然所有 jar 包都存放在C盤中,但是並不會佔用太大空間的。
當然如果你非要改也是可以修改的,在 conf/settings.xml 中自定義本地倉庫位置:
在這裏插入圖片描述

3.本地鏡像站配置

由於默認的中央倉庫下載速度較慢,因此,可以將遠程倉庫的地址修改爲阿里巴巴的倉庫地址:

<mirror>
	    <!--該鏡像的id-->
	    <id>nexus-aliyun</id>
	    <!--該鏡像用來取代的遠程倉庫,central是中央倉庫的id-->
	    <mirrorOf>central</mirrorOf>
	    <name>Nexus aliyun</name>
	    <!--該鏡像的倉庫地址,這裏是用的阿里的倉庫-->
	    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
   </mirror>

複製這段配置,添加到 conf/settings.xml 中的 mirrors 節點中:
在這裏插入圖片描述

4.Maven 常用命令

Maven 中有一些常見的命令,如果你使用 IDEA ,那麼可以不用命令,直接用 IDEA 自帶的插件就可以了。

常用命令 中文含義 說明
mvn clean 清理 這個命令可以用來清理已經編譯好的文件
mvn compile 編譯 將 Java 代碼編譯成 Class 文件
mvn test 測試 項目測試
mvn package 打包 跟據用戶的配置,將項目達成 jar 包或者 war 包
mvn install 安裝 手動向本地倉庫安裝一個 jar
mvn deploy 上傳 將 jar 上傳到私服

這裏需要注意,這些命令都不是獨立運行的,它有一個順序,列如:我想將 Jar 上傳到私服,那麼就要構建 jar ,就需要執行 package 命令,要打包,也要測試,那就要走 mvn test 命令,要測試也要先編譯…,因此,最終所有的命令都會執行一遍,不過開發者也可以手動配置不執行某一個命令,這就是跳過,一般來說,除了測試,其他步驟都不建議跳過。

1.通過命令來構建項目
  • 可以直接通過命令來構建一個 Maven 項目,不過在實際開發中,一般使用IDE直接創建 Maven 項目。
  • 創建命令:
    mvn archetype:generate -DgroupId=org.javaboy -DartifactId=firstapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    看到如下提示:表示項目創建成功:
    在這裏插入圖片描述
    項目創建成功後,就兩個文件:
    在這裏插入圖片描述
    pom.xml 文件中定義了所有的項目配置:
    在這裏插入圖片描述
2.對項目進行打包

我們通過 mvn package 命令可以將剛剛創建的項目打成一個 jar 包,在打包之前,需要配置 JDK 的版本至少是 7 以上,因此,我們還需要手動修改一下 pom.xml 文件,既添加如下配置:

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
	<java.version>1.8</java.version>
	<maven.compiler.source>1.8</maven.compiler.source>
	<maven.compiler.target>1.8</maven.compiler.target>
</properties>

如下圖,添加到如下位置即可:
在這裏插入圖片描述
添加後執行打包命令,注意執行所有命令的時候,都要注意命令行定位到 pom.xml 文件所在的目錄,看到如下提示,表示項目打包成功。
在這裏插入圖片描述

3.將項目安裝到本地倉庫

如果需要將項目安裝到本地倉庫,可以直接執行 mvn install 命令。注意:mvn install 命令會包含上面的 mvn package 打包過程。
在這裏插入圖片描述
安裝到本地倉庫後,跟據命令行提示的位置即可找到相關的 jar 包了。
在這裏插入圖片描述

Maven 依賴管理

Maven 項目,如果需要使用第三方的控件,都是通過依賴管理來完成的,這裏用到的一個東西就是 pom.xml 文件,概念叫做項目對象模型 (POM,Project Object Model),我們在 pom.xml 中定義了 Maven 項目的形式,所以, pom.xml 相當於是 Maven 項目的一個地圖,就類似 web,xml 文件用來描述三大 web 組件一樣。

1.Maven 座標
<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  • dependencies
    在 dependencies 標籤中,添加項目需要的 jar 所對應的 maven 座標。
  • dependency
    一個 dependency 標籤表示一個座標
  • groupId
    團隊、公司、組織機構等等的唯一標識。團體標識的約定是它以創建這個項目的組織名稱的逆向域名開頭,一個 Maven 座標必須包含 groupId。
  • artifactId
    artifactId 相當於在一個組織中項目的唯一標識符
  • version
    一個項目的版本,一個項目可能會有多個版本,如果是正在開發的項目,我們可以給項目加上一個 SNAPSHOT,表示這是一個快照版(新建項目的默認版本就是快照版)。
  • scope
    表示依賴範圍
依賴範圍 編譯有效 測試有效 運行時有效 打包有效 例子
Complie spring-core
test Junit
provided servlet-api
runtime JDBC 驅動
system 本地 maven 倉庫之外的類庫

我們添加了很多依賴,但是不同的依賴的使用範圍不一樣,最典型的有兩個,一個是數據庫驅動,另一個是單元測試。數據庫驅動在使用的過程中,我們自己寫代碼,寫的是 JDBC 代碼,只有在項目運行時,才需要執行 MySQL 驅動中的代碼,所以,MySQL 驅動這個依賴在添加到項目中之後,可以設置它的 scope 爲 runtime,編譯的時候不生效。
同樣,單元測試,只有在測試的時候生菜,所以設置它的 scope 爲 test,這樣當項目打包發佈時,單元測試的依賴就不會跟着發佈。

2.依賴衝突
  • 依賴衝突產生的原因:
    在這裏插入圖片描述
    在圖中,a.jar 依賴 b.jar ,同時 a.jar 依賴 d.jar ,這個時候, a 和 b、d 的關係是直接依賴的關係, a 和 c 的關係是間接依賴的關係。
1.衝突解決
  1. 先定義先使用
  2. 路徑最近原則(直接聲明使用)
    上面這兩條是默認行爲,我們也可以手動控制,手動控制主要通過排除依賴來實現,如下:
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.9.RELEASE</version>
	  <exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
		</exclusion>
	  </exclusions>
    </dependency>

這段配置表示從 spring-context 中排除 spring-core 依賴。

Maven 私服

  • Maven 倉庫管理也叫 Maven 私服或者代理倉庫。使用 Maven 私服有兩個目的:

    1. 私服是一個介於開發者和遠程倉庫之間的代理
    2. 私服可以用來部署公司自己的 jar

1.Nexus 介紹

Nexus 是一個強大的 Maven 倉庫管理工具,使用 Nexus 可以方便的管理內部倉庫同時簡化外部倉庫的訪問。官網是:https://www.sonatype.com/

2.安裝 Nexus
  • 下載
    下載地址:https://www.sonatype.com/download-oss-sonatype
  • 解壓
    將下載下來的壓縮包,拷貝到一個沒有中文的路徑下進行解壓。
  • 啓動
    解壓之後,通過管理員身份打開 cmd 窗口,然後進入 nexus 解壓後的目錄,執行 nexus.exe/run 命令啓動服務即可。
    啓動成功後,瀏覽器訪問 localhost:8081 打開管理員頁面。然後點解右上角的的登陸按鈕進行登陸,默認的用戶名、密碼是:admin/admin123。當然,用戶也可以點擊設置按鈕,手動配置其他用戶。
1.倉庫類型
名稱 說明
proxy 表示這個倉庫是一個遠程倉庫的代理,最典型的就是代理 Maven 中央倉庫
hosted 宿主倉庫,公司自己開發的一些 jar 存放在宿主機倉庫中,以及一些在 Maven 中央倉庫上沒有的 jar
group 倉庫組,包含代理倉庫和宿主倉庫
virtual 虛擬倉庫
2.上傳 jar

上傳 jar ,配置兩個地方:

  • Maven 的 conf/setttings.xml 文件配置:
<server>
	<id>releases</id>
	<username>admin</username>
	<password>admin123</password>
</server>
<server>
	<id>snapshots</id>
	<username>admin</username>
	<password>admin123</password>
</server>
  • 在要上傳的 jar 的項目的 pom.xml 文件上,配置上傳路徑:
<distributionManagement>
	<repository>
		<id>releases</id>
		<url>http://localhost:8081/repository/maven-releases</url>
	</repository>
	<snapshotRepository>
		<id>snapshots</id>
		<url>http://localhost:8081/repository/maven-snapshots</url>
	</snapshotRepository>
</distributionManagement>
  • 配置完成後,點擊 deploy 按鈕,或者執行 mvn deploy 命令就可以將 jar 上傳到私服了。
3.下載私服上的 jar
  • 直接在項目中添加如下依賴,添加完成後,額外增加私服地址即可:
<repositories>
	<repository>	
		<id>local-repository</id>
		<url>http://localhost:8081/repository/maven-public</url>
		<releases>
			<enabled>true</enabled>
		</releases>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
	</repository>
</repositories>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章