大家好,我是袁庭新。
Maven在某個統(tǒng)一的位置存儲所有項(xiàng)目的構(gòu)件,這個統(tǒng)一的位置,我們就稱之為倉庫。換言之,倉庫就是存放依賴和插件的地方。
任何的構(gòu)件都有唯一的坐標(biāo),該坐標(biāo)定義了構(gòu)件在倉庫中的唯一存儲路徑。當(dāng)Maven項(xiàng)目需要某些構(gòu)件時,只要其POM文件中聲明了這些構(gòu)件的坐標(biāo),Maven就會根據(jù)這些坐標(biāo)找自動到倉庫中找到并使用它們。
項(xiàng)目構(gòu)建完成生成的構(gòu)件,也可以安裝或者部署到倉庫中,供其他項(xiàng)目使用。
1.倉庫的分類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就會報(bào)錯。
遠(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倉庫的分類如下圖。
由于私服在實(shí)際開發(fā)中十分的常用,也特別重要,因此本節(jié)只稍做介紹,關(guān)于Maven私服的詳細(xì)內(nèi)容將在后續(xù)章節(jié)專題介紹。
2.本地倉庫Maven本地倉庫實(shí)際上就是本地計(jì)算機(jī)上的一個目錄(文件夾),它會在第一次執(zhí)行Maven命令時被創(chuàng)建。
Maven本地倉庫可以儲存本地所有項(xiàng)目所需的構(gòu)件。當(dāng)Maven項(xiàng)目第一次進(jìn)行構(gòu)建時,會自動從遠(yuǎn)程倉庫搜索依賴項(xiàng),并將其下載到本地倉庫中。當(dāng)項(xiàng)目再進(jìn)行構(gòu)建時,會直接從本地倉庫搜索依賴項(xiàng)并引用,而不會再次向遠(yuǎn)程倉庫獲取。
以Window系統(tǒng)為例說明,Maven本地倉庫默認(rèn)地址為C:%USER_HOME%.m2\repository ,但出于某些原因(例如C盤空間不夠),我們通常會重新自定義本地倉庫的位置。這時需要修改%MAVEN_HOME%\conf目錄下的settings.xml文件,通過localRepository元素定義新的本地倉庫地址。
1.進(jìn)入apache-maven-3.8.4/conf目錄下,找到settings.xml配置文件,我們在該文件中進(jìn)行本地倉庫的配置。
2.打開settings.xml文件,進(jìn)行如下配置。
<!-- 選擇一個磁盤目錄,作為本地倉庫。以下兩種配置Maven本地倉庫的方式,根據(jù)操作系統(tǒng)二選其一。 --><!-- 1.Windows系統(tǒng)配置Maven本地倉庫 --><localRepository>H:\ProgramSoftware\localRepository</localRepository><!-- 2.Mac OS系統(tǒng)配置Maven本地倉庫 --><localRepository>/Users/yuanxin/Documents/ProgramSoftware/localRepository</localRepository>3.在本臺計(jì)算機(jī)上,上述配置的Maven本地倉庫地址處創(chuàng)建【localRepository】文件夾,用于存放將來從遠(yuǎn)程倉庫或中央倉庫下載的插件和jar包。
構(gòu)件只有儲存在本地倉庫中,才能被其他的Maven項(xiàng)目使用。構(gòu)件想要進(jìn)入本地倉庫,除了從遠(yuǎn)程倉庫下載到本地倉庫外,還可以使用命令mvn install將本地項(xiàng)目的輸出構(gòu)件安裝到本地倉庫中。
3.中央倉庫中央倉庫是由Maven社區(qū)提供的一種特殊的遠(yuǎn)程倉庫,它包含了絕大多數(shù)流行的開源構(gòu)件。在默認(rèn)情況下,當(dāng)本地倉庫沒有Maven所需的構(gòu)件時,會首先嘗試從中央倉庫下載。
中央倉庫具有如下特點(diǎn):
這個倉庫由Maven社區(qū)管理不需要配置需要通過網(wǎng)絡(luò)才能訪問我們可以通過Maven社區(qū)提供的URL地址:http://search.maven.org/#browse,瀏覽其中的構(gòu)件。中央倉庫包含了絕大多數(shù)流行的開源Java構(gòu)件及其源碼、作者信息和許可證信息等。一般來說,Maven項(xiàng)目所依賴的構(gòu)件都可以從中央倉庫下載到。
雖然中央倉庫屬于遠(yuǎn)程倉庫的范疇,但由于它的特殊性,一般會把它與其他遠(yuǎn)程倉庫區(qū)分開。我們常說的遠(yuǎn)程倉庫,一般不包括中央倉庫。
4.遠(yuǎn)程倉庫如果Maven在本地倉庫和中央倉庫中都找不到依賴的庫文件,它就會停止構(gòu)建過程并輸出錯誤信息到IDE控制臺。為避免這種情況的發(fā)生,Maven還提供了遠(yuǎn)程倉庫的概念,它是一種由開發(fā)人員自己定制的倉庫,其中包含了供其他項(xiàng)目使用的代碼庫或者構(gòu)件。
國內(nèi)開發(fā)人員由于網(wǎng)絡(luò)原因,直接從中央倉庫下載構(gòu)件時,速度較慢或不穩(wěn)定,我們通常會使用中央倉庫的國內(nèi)鏡像站來解決該問題。
配置Maven鏡像的方法也非常的簡單,我們只需要在Maven安裝目錄中setting.xml文件的mirrors節(jié)點(diǎn)中,使用mirror標(biāo)簽添加鏡像的相關(guān)信息即可。
目前國內(nèi)使用最多,最穩(wěn)定的中央倉庫鏡像分別是由[阿里云]和[華為云]提供的,它們的地址配置如下。
阿里云鏡像:https://developer.aliyun.com/mvn/guide華為云鏡像:https://mirrors.huaweicloud.com/home4.1 阿里云鏡像阿里云Maven中央倉庫為阿里云云效提供的公共代理倉庫,幫助研發(fā)人員提高研發(fā)生產(chǎn)效率,使用阿里云Maven中央倉庫作為下載源,速度更快更穩(wěn)定。
1.打開Maven的配置文件( windows機(jī)器一般在Maven安裝目錄的conf/settings.xml),在<mirrors></mirrors>標(biāo)簽中添加mirror子節(jié)點(diǎn)。進(jìn)入apache-maven-3.8.4/conf目錄下,在settings.xml文件中做如下配置。
<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共倉庫</name> <url>https://maven.aliyun.com/repository/public</url></mirror>2.如果想使用其它代理倉庫,可在<repositories></repositories>節(jié)點(diǎn)中加入對應(yīng)的倉庫使用地址。以使用central代理倉為例。
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ytx.edu</groupId> <artifactId>hello_maven</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>hello_maven</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <repositories> <repository> <id>central</id> <url>https://maven.aliyun.com/repository/central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories></project>說明:上述步驟1和步驟2針對Maven的配置遠(yuǎn)程倉庫的配置,兩種方式任選其一即可。
3.在你的pom.xml文件<denpendencies></denpendencies>節(jié)點(diǎn)中加入你要引用的文件信息。
<dependency> <groupId>[GROUP_ID]</groupId> <artifactId>[ARTIFACT_ID]</artifactId> <version>[VERSION]</version></dependency>4.執(zhí)行拉取命令。
mvn install4.2 華為云鏡像打開Maven的配置文件( windows機(jī)器一般在Maven安裝目錄的conf/settings.xml),在<mirrors></mirrors>標(biāo)簽中添加mirror子節(jié)點(diǎn)。進(jìn)入apache-maven-3.8.4/conf目錄下,在settings.xml文件中做如下配置。
<mirror> <id>huaweicloud</id> <name>mirror from maven huaweicloud</name> <mirrorOf>central</mirrorOf> <url>https://repo.huaweicloud.com/repository/maven/</url></mirror>以上配置中,mirrorOf的取值為central,表示該配置為中央倉庫的鏡像,所有對于中央倉庫的請求都會轉(zhuǎn)到該鏡像。當(dāng)然,我們也可以使用以上方式配置其他倉庫的鏡像。另外三個元素id、name和url分別表示鏡像的唯一標(biāo)識、名稱和地址。
4.3 鏡像與Maven私服配合使用鏡像通常會和Maven私服配合使用,由于Maven私服可以代理所有外部的公共倉庫(包括中央倉庫),因此對于組織內(nèi)部的用戶來說,使用一個私服就相當(dāng)于使用了所有需要的外部倉庫,這樣就可以將配置集中到私服中,簡化Maven本身的配置。這種情況下,用戶所有所需的構(gòu)件都可以從私服中獲取,此時私服就是所有倉庫的鏡像。
<srttings> ... <mirrors> <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <name>nexus</name> <url>http://localhost:8000/nexus/content/groups/ytx_repository_group/</url> </mirror> </mirrors> ...</settings>以上配置中,mirrorOf元素的取值為*,表示匹配所有遠(yuǎn)程倉庫,所有對于遠(yuǎn)程倉庫的請求都會被攔截,并跳轉(zhuǎn)到url元素指定的地址。
為了滿足一些較為復(fù)雜的需求,Maven還支持一些更為高級的配置。
<mirrorOf>*</mirrorOf>:匹配所有遠(yuǎn)程倉庫。<mirrorOf>external:*</mirrorOf>:匹配所有遠(yuǎn)程倉庫,使用localhost和file://協(xié)議的除外。即,匹配所有不在本機(jī)上的遠(yuǎn)程倉庫。<mirrorOf>repo1,repo2</mirrorOf>:匹配倉庫repo1和repo2,使用逗號分隔多個遠(yuǎn)程倉庫。<mirrorOf>*,!repo1</miiroOf>:匹配所有遠(yuǎn)程倉庫,repo1除外,使用感嘆號將倉庫從匹配中排除。需要注意的是,由于鏡像倉庫完全屏蔽了被鏡像倉庫,當(dāng)鏡像倉庫不穩(wěn)定或者停止服務(wù)時,Maven也無法訪問被鏡像倉庫,因而將無法下載構(gòu)件。
5.Profiles配置在settings.xml文件中的<profiles></profiles>標(biāo)簽中,添加一個<profile>標(biāo)簽,用于限定Maven項(xiàng)目默認(rèn)的JDK版本。
<profiles> <!-- 在已有的profiles標(biāo)簽中添加profile標(biāo)簽 --> <profile> <id>jdk-11</id> <activation> <activeByDefault>true</activeByDefault> <jdk>11</jdk> </activation> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <maven.compiler.compilerVersion>11</maven.compiler.compilerVersion> </properties> </profile></profiles><!-- 讓增加的profile生效 --><activeProfiles> <activeProfile>jdk-11</activeProfile></activeProfiles>6.總結(jié)本文主要介紹了 Maven 倉庫相關(guān)知識。Maven 倉庫用于存放依賴和插件,分為本地倉庫和遠(yuǎn)程倉庫(中央倉庫、私服、其他公共倉庫)。本地倉庫是本地計(jì)算機(jī)目錄,默認(rèn)地址可修改。中央倉庫由 Maven 社區(qū)管理,默認(rèn)優(yōu)先從其下載構(gòu)件。遠(yuǎn)程倉庫可定制,國內(nèi)常用阿里云和華為云鏡像解決下載問題。還講述了私服及鏡像與私服配合使用,以及在 settings.xml 中通過 Profiles 配置限定項(xiàng)目默認(rèn) JDK 版本等內(nèi)容,為 Maven 項(xiàng)目構(gòu)建提供了重要的倉庫管理指導(dǎo)。
轉(zhuǎn)載請注明來自夕逆IT,本文標(biāo)題:《maven中央倉庫(Maven倉庫如何搭建保姆級教程)》

還沒有評論,來說兩句吧...