Maven倉庫的具體使用(本地倉庫+遠(yuǎn)程倉庫)
在 Maven 中,任何一個依賴、插件或者項目構(gòu)建的輸出,都可以稱為構(gòu)件。
Maven 在某個統(tǒng)一的位置存儲所有項目的構(gòu)件,這個統(tǒng)一的位置,我們就稱之為倉庫。換言之,倉庫就是存放依賴和插件的地方。
任何的構(gòu)件都有唯一的坐標(biāo),該坐標(biāo)定義了構(gòu)件在倉庫中的唯一存儲路徑。當(dāng) Maven 項目需要某些構(gòu)件時,只要其 POM 文件中聲明了這些構(gòu)件的坐標(biāo),Maven 就會根據(jù)這些坐標(biāo)找自動到倉庫中找到并使用它們。
項目構(gòu)建完成生成的構(gòu)件,也可以安裝或者部署到倉庫中,供其他項目使用。
倉庫的分類
Maven 倉庫可以分為 2 個大類:
- 本地倉庫
- 遠(yuǎn)程倉庫
當(dāng) Maven 根據(jù)坐標(biāo)尋找構(gòu)件時,它會首先查看本地倉庫,若本地倉庫存在此構(gòu)件,則直接使用;若本地倉庫不存在此構(gòu)件,Maven 就會去遠(yuǎn)程倉庫查找,若發(fā)現(xiàn)所需的構(gòu)件后,則下載到本地倉庫使用。如果本地倉庫和遠(yuǎn)程倉庫都沒有所需的構(gòu)件,則 Maven 就會報錯。
遠(yuǎn)程倉庫還可以分為 3 個小類:中央倉庫、私服、其他公共倉庫。
- 中央倉庫是由 Maven 社區(qū)提供的一種特殊的遠(yuǎn)程倉庫,它包含了絕大多數(shù)流行的開源構(gòu)件。在默認(rèn)情況下,當(dāng)本地倉庫沒有 Maven 所需的構(gòu)件時,會首先嘗試從中央倉庫下載。
- 私服是一種特殊的遠(yuǎn)程倉庫,它通常設(shè)立在局域網(wǎng)內(nèi),用來代理所有外部的遠(yuǎn)程倉庫。它的好處是可以節(jié)省帶寬,比外部的遠(yuǎn)程倉庫更加穩(wěn)定。
- 除了中央倉庫和私服外,還有很多其他公共倉庫,例如 JBoss Maven 庫,Java.net Maven 庫等等。Maven 倉庫的分類如下圖:

本地倉庫
Maven 本地倉庫實際上就是本地計算機上的一個目錄(文件夾),它會在第一次執(zhí)行 Maven 命令時被創(chuàng)建。
Maven 本地倉庫可以儲存本地所有項目所需的構(gòu)件。當(dāng) Maven 項目第一次進行構(gòu)建時,會自動從遠(yuǎn)程倉庫搜索依賴項,并將其下載到本地倉庫中。當(dāng)項目再進行構(gòu)建時,會直接從本地倉庫搜索依賴項并引用,而不會再次向遠(yuǎn)程倉庫獲取。
Maven 本地倉庫默認(rèn)地址為 C:\%USER_HOME%\.m2\repository ,但出于某些原因(例如 C 盤空間不夠),我們通常會重新自定義本地倉庫的位置。這時需要修改 %MAVEN_HOME%\conf 目錄下的 settings.xml 文件,通過 localRepository 元素定義另一個本地倉庫地址,例如:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>D:/myRepository/repository</localRepository>
</settings>構(gòu)件只有儲存在本地倉庫中,才能被其他的 Maven 項目使用。構(gòu)件想要進入本地倉庫,除了從遠(yuǎn)程倉庫下載到本地倉庫外,還可以使用命令 mvn install 將本地項目的輸出構(gòu)件安裝到本地倉庫中。
中央倉庫
中央倉庫是由 Maven 社區(qū)提供的一種特殊的遠(yuǎn)程倉庫,它包含了絕大多數(shù)流行的開源構(gòu)件。在默認(rèn)情況下,當(dāng)本地倉庫沒有 Maven 所需的構(gòu)件時,會首先嘗試從中央倉庫下載。
中央倉庫具有如下特點:
- 這個倉庫由 Maven 社區(qū)管理
- 不需要配置
- 需要通過網(wǎng)絡(luò)才能訪問
我們可以通過 Maven 社區(qū)提供的地址,瀏覽其中的構(gòu)件。中央倉庫包含了絕大多數(shù)流行的開源 Java 構(gòu)件及其源碼、作者信息和許可證信息等。一般來說,Maven 項目所依賴的構(gòu)件都可以從中央倉庫下載到。
雖然中央倉庫屬于遠(yuǎn)程倉庫的范疇,但由于它的特殊性,一般會把它與其他遠(yuǎn)程倉庫區(qū)分開。我們常說的遠(yuǎn)程倉庫,一般不包括中央倉庫。
遠(yuǎn)程倉庫
如果 Maven 在本地倉庫和中央倉庫中都找不到依賴的庫文件,它就會停止構(gòu)建過程并輸出錯誤信息到控制臺。為避免這種情況的發(fā)生,Maven 還提供了遠(yuǎn)程倉庫的概念,它是一種由開發(fā)人員自己定制的倉庫,其中包含了供其他項目使用的代碼庫或者構(gòu)件。 如下:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.biancheng.www</groupId>
<artifactId>maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.bangcheng.common-lib</groupId>
<artifactId>common-lib</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>biancheng.lib1</id>
<url>http://download.biancheng.org/maven2/lib1</url>
</repository>
<repository>
<id>biancheng.lib2</id>
<url>http://download.biancheng.org/maven2/lib2</url>
</repository>
</repositories>
</project>Maven 依賴搜索順序
當(dāng)通過 Maven 構(gòu)建項目時,Maven 按照如下順序查找依賴的構(gòu)件。
- 從本地倉庫查找構(gòu)件,如果沒有找到,跳到第 2 步,否則繼續(xù)執(zhí)行其他處理。
- 從中央倉庫查找構(gòu)件,如果沒有找到,并且已經(jīng)設(shè)置其他遠(yuǎn)程倉庫,然后移動到第 4 步;如果找到,那么將構(gòu)件下載到本地倉庫中使用。
- 如果沒有設(shè)置其他遠(yuǎn)程倉庫,Maven 則會停止處理并拋出錯誤。
- 在遠(yuǎn)程倉庫查找構(gòu)件,如果找到,則會下載到本地倉庫并使用,否則 Maven 停止處理并拋出錯誤。
到此這篇關(guān)于Maven倉庫的具體使用(本地倉庫+遠(yuǎn)程倉庫)的文章就介紹到這了,更多相關(guān)Maven倉庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Maven項目外部jar包導(dǎo)入的實現(xiàn)示例
在Maven項目里,我們經(jīng)常需要導(dǎo)入jar包依賴,本文主要介紹了Maven項目外部jar包導(dǎo)入的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-08-08
Java Stream中的Spliterator類概念及原理解析
Spliterator是Java 8引入的一個接口,位于java.util包中,它結(jié)合了迭代器(Iterator)的遍歷能力和分割器(Splitter)的分割能力,本文將詳細(xì)介紹Spliterator的概念、原理、作用、類中定義的關(guān)鍵方法,以及它在Stream API中的實際應(yīng)用,感興趣的朋友一起看看吧2024-08-08
SpringBoot使用Guava實現(xiàn)日志脫敏的示例代碼
本文主要介紹了SpringBoot使用Guava實現(xiàn)日志脫敏的示例代碼,使用Guava中的Strings、Maps和CharMatcher類來進行日志脫敏,保護敏感數(shù)據(jù)的安全,感興趣的可以了解一下2024-01-01
Java使用JCommander實現(xiàn)解析命令行參數(shù)
jcommander?是一個只有幾十?kb?的?Java?命令行參數(shù)解析工具,可以通過注解的方式快速實現(xiàn)命令行參數(shù)解析,本文就來和大家介紹一下JCommander是如何解析命令行參數(shù)吧2023-06-06

