Maven詳解之倉(cāng)庫(kù)------本地倉(cāng)庫(kù)泽西、遠(yuǎn)程倉(cāng)庫(kù)

在Maven中,任何一個(gè)依賴甲喝、插件或者項(xiàng)目構(gòu)建的輸出尝苇,都可以稱之為構(gòu)件。

Maven在某個(gè)統(tǒng)一的位置存儲(chǔ)所有項(xiàng)目的共享的構(gòu)件埠胖,這個(gè)統(tǒng)一的位置糠溜,我們就稱之為倉(cāng)庫(kù)。(倉(cāng)庫(kù)就是存放依賴和插件的地方)

任何的構(gòu)件都有唯一的坐標(biāo)直撤,Maven根據(jù)這個(gè)坐標(biāo)定義了構(gòu)件在倉(cāng)庫(kù)中的唯一存儲(chǔ)路徑非竿,

解讀Maven在倉(cāng)庫(kù)中的存儲(chǔ)路徑:

1.基于groupId準(zhǔn)備路徑,將句點(diǎn)分隔符轉(zhuǎn)成路徑分隔符谋竖,就是將 "." 轉(zhuǎn)換成 "/" ; example: org.testng --->org/testng

2.基于artifactId準(zhǔn)備路徑红柱,將artifactId連接到后面:org/testng/testng

3.使用version準(zhǔn)備路徑,將version連接到后面:org/testng/testng/5.8

4.將artifactId于version以分隔符連字號(hào)連接到后面:org/testng/testng/5.8/tesng-5.8

5.判斷如果構(gòu)件有classifier蓖乘,就要在 第4項(xiàng) 后增加 分隔符連字號(hào) 再加上 classifier锤悄,org/testng/testng/5.8/tesng-5.8-jdk5

6.檢查構(gòu)件的extension,如果extension存在嘉抒,則加上句點(diǎn)分隔符和extension零聚,而extension是由packing決定的,org/testng/testng/5.8/tesng-5.8-jdk5.jar

到這里我們就明白了Maven 對(duì)于構(gòu)件存儲(chǔ)的細(xì)節(jié)些侍。

Maven 倉(cāng)庫(kù)的分類:

maven的倉(cāng)庫(kù)只有兩大類:

1.本地倉(cāng)庫(kù)

2.遠(yuǎn)程倉(cāng)庫(kù)隶症,在遠(yuǎn)程倉(cāng)庫(kù)中又分成了3種:

2.1 中央倉(cāng)庫(kù)

2.2 私服

2.3 其它公共庫(kù)

1.本地倉(cāng)庫(kù)

顧名思義,就是Maven在本地存儲(chǔ)構(gòu)件的地方岗宣。

注:maven的本地倉(cāng)庫(kù)蚂会,在安裝maven后并不會(huì)創(chuàng)建,它是在第一次執(zhí)行maven命令的時(shí)候才被創(chuàng)建

maven本地倉(cāng)庫(kù)的默認(rèn)位置:無(wú)論是Windows還是Linux耗式,在用戶的目錄下都有一個(gè).m2/repository/的倉(cāng)庫(kù)目錄胁住,這就是Maven倉(cāng)庫(kù)的默認(rèn)位置

如何更改maven默認(rèn)的本地倉(cāng)庫(kù)的位置:這里要引入一個(gè)新的元素:localRepository趁猴,它是存在于maven的settings.xml文件中

1.1 更改配置用戶范圍的本地倉(cāng)庫(kù):

先在/.m2/目錄下創(chuàng)建settings.xml文件,然后在~/.m2/settings.xml彪见,設(shè)置localRepository元素的值為想要的倉(cāng)庫(kù)地址

<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
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository-->
  <localRepository>D:/myworkspace/maven_repository</localRepository>
  

  <!-- interactiveMode
   | This will determine whether maven prompts you when it needs input. If set to false,
   | maven will use a sensible default value, perhaps based on some other setting, for
   | the parameter in question.
   |
   | Default: true
  <interactiveMode>true</interactiveMode>
  -->

這時(shí)候躲叼,maven的本地倉(cāng)庫(kù)地址就變成了 D:\maven_new_repository ,注:此時(shí)配置的maven的本地倉(cāng)庫(kù)是屬于用戶范圍的企巢。

1.2 更改配置全局范圍的本地倉(cāng)庫(kù):

在M2_HOME/conf/settings.xml(D:\soft\maven\apache-maven-3.3.3\confsettings.xml\settings.xml)中更改配置枫慷,更改配置的方法同上

注:此時(shí)更改后,所有的用戶都會(huì)受到影響浪规,而且如果maven進(jìn)行升級(jí)或听,那么所有的配置都會(huì)被清除,所以要提前復(fù)制和備份M2_HOME/conf/settings.xml文件

故:一般情況下不推薦配置全局的settings.xml

1.3 工程使用倉(cāng)庫(kù)配置的優(yōu)先級(jí)順序

這個(gè)確實(shí)是有個(gè)優(yōu)先級(jí)的笋婿,應(yīng)該是pom>用戶級(jí)別>全局級(jí)別
例:如果pom中不配置誉裆,就取用戶級(jí)別,如果用戶級(jí)別也沒(méi)有配置缸濒,就取全局級(jí)別

2. 遠(yuǎn)程倉(cāng)庫(kù)

2.1 說(shuō)到遠(yuǎn)程倉(cāng)庫(kù)先從 最核心的中央倉(cāng)庫(kù)開始足丢,中央倉(cāng)庫(kù)是默認(rèn)的遠(yuǎn)程倉(cāng)庫(kù),maven在安裝的時(shí)候庇配,自帶的就是中央倉(cāng)庫(kù)的配置

在maven的聚合與繼承中我們說(shuō)過(guò)斩跌,所有的maven項(xiàng)目都會(huì)繼承超級(jí)pom,具體的說(shuō)捞慌,包含了下面配置的pom我們就稱之為超級(jí)pom

<repositories>  
    <repository>  
      <id>central</id>  
      <name>Central Repository</name>  
      <url>http://repo.maven.apache.org/maven2</url>  
      <layout>default</layout>  
      <snapshots>  
        <enabled>false</enabled>  
      </snapshots>  
    </repository>  
</repositories>

中央倉(cāng)庫(kù)包含了絕大多數(shù)流行的開源Java構(gòu)件耀鸦,以及源碼、作者信息啸澡、SCM袖订、信息、許可證信息等嗅虏。一般來(lái)說(shuō)洛姑,簡(jiǎn)單的Java項(xiàng)目依賴的構(gòu)件都可以在這里下載得到。

2.2 私服

私服是一種特殊的遠(yuǎn)程倉(cāng)庫(kù)皮服,它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù)楞艾,私服代理廣域網(wǎng)上的遠(yuǎn)程倉(cāng)庫(kù),供局域網(wǎng)內(nèi)的Maven用戶使用冰更。當(dāng)Maven需要下載構(gòu)件的時(shí)候产徊,它從私服請(qǐng)求昂勒,如果私服上不存在該構(gòu)件蜀细,則從外部的遠(yuǎn)程倉(cāng)庫(kù)下載,緩存在私服上之后戈盈,再為Maven的下載請(qǐng)求提供服務(wù)奠衔。我們還可以把一些無(wú)法從外部倉(cāng)庫(kù)下載到的構(gòu)件上傳到私服上谆刨。

Maven私服的 個(gè)特性:

1.節(jié)省自己的外網(wǎng)帶寬:減少重復(fù)請(qǐng)求造成的外網(wǎng)帶寬消耗

2.加速M(fèi)aven構(gòu)件:如果項(xiàng)目配置了很多外部遠(yuǎn)程倉(cāng)庫(kù)的時(shí)候沧奴,構(gòu)建速度就會(huì)大大降低

3.部署第三方構(gòu)件:有些構(gòu)件無(wú)法從外部倉(cāng)庫(kù)獲得的時(shí)候恶耽,我們可以把這些構(gòu)件部署到內(nèi)部倉(cāng)庫(kù)(私服)中,供內(nèi)部maven項(xiàng)目使用

4.提高穩(wěn)定性耘子,增強(qiáng)控制:Internet不穩(wěn)定的時(shí)候脏里,maven構(gòu)建也會(huì)變的不穩(wěn)定她我,一些私服軟件還提供了其他的功能

5.降低中央倉(cāng)庫(kù)的負(fù)荷:maven中央倉(cāng)庫(kù)被請(qǐng)求的數(shù)量是巨大的,配置私服也可以大大降低中央倉(cāng)庫(kù)的壓力

當(dāng)前主流的maven私服:

1.Apache的Archiva

2.JFrog的Artifactory

3.Sonatype的Nexus

三迫横、遠(yuǎn)程倉(cāng)庫(kù)配置

配置遠(yuǎn)程倉(cāng)庫(kù)將引入新的配置元素:<repositories> <repository>

<repositories>元素下番舆,可以使用 <repository>子元素聲明一個(gè)或者多個(gè)遠(yuǎn)程倉(cāng)庫(kù)。****

例子:

<repositories>  
        <repository>  
            <id>jboss</id>  
            <name>JBoss Repository</name>  
            <url>http://repository.jboss.com/maven2/</url>  
            <releases>  
                <updatePolicy>daily</updatePolicy><!-- never,always,interval n -->  
                <enabled>true</enabled>  
                <checksumPolicy>warn</checksumPolicy><!-- fail,ignore -->  
            </releases>  
            <snapshots>  
                <enabled>false</enabled>  
            </snapshots>  
            <layout>default</layout>  
        </repository>  
</repositories>

<updatePolicy>元素:表示更新的頻率矾踱,值有:never, always,interval,daily, daily 為默認(rèn)值

<checksumPolicy>元素:表示maven檢查和檢驗(yàn)文件的策略恨狈,warn為默認(rèn)值

出于安全方面的考慮,有時(shí)我們要對(duì)遠(yuǎn)程倉(cāng)庫(kù)的訪問(wèn)進(jìn)行認(rèn)證呛讲,一般將認(rèn)證信息配置在settings.xml中:

<servers>  
        <server>  
            <id>same with repository id in pom</id>  
            <username>username</username>  
            <password>pwd</password>  
        </server>  
</servers>

注:這里的id必須與POM中需要認(rèn)證的repository元素的Id一致禾怠。

如何將生成的項(xiàng)目部署到遠(yuǎn)程倉(cāng)庫(kù)

完成這項(xiàng)工作,也需要在POM中進(jìn)行配置贝搁,這里有新引入了一個(gè)元素:<distributionManagement>

distributionManagement包含了2個(gè)子元素:repository和snapshotRepository, 前者表示發(fā)布版本構(gòu)件的倉(cāng)庫(kù)吗氏,后者表示快照版本的倉(cāng)庫(kù)

這兩個(gè)元素都需要配置 id(該遠(yuǎn)程倉(cāng)庫(kù)的唯一標(biāo)識(shí)),name雷逆,url(表示該倉(cāng)庫(kù)的地址)

向遠(yuǎn)程倉(cāng)庫(kù)中部署構(gòu)件牲证,需要進(jìn)行認(rèn)證。配置同上

配置正確后運(yùn)行: mvn clean deploy

正確的看待快照

之前我們?cè)谂渲胮om的時(shí)候关面,對(duì)于快照的配置都很謹(jǐn)慎坦袍,或者說(shuō)很少用快照的版本,原因是它還很不穩(wěn)定等太,極容易給我們的系統(tǒng)帶來(lái)未知的錯(cuò)誤捂齐,讓我們很難查找。其實(shí)快照版本也并不是一無(wú)是處缩抡,快照最大的用途是用在開發(fā)的過(guò)程中奠宜,尤其是有模塊依賴的時(shí)候,比如說(shuō)AB兩個(gè)模塊同時(shí)開發(fā)瞻想,A依賴于B压真,開發(fā)過(guò)程中AB都是持續(xù)集成的開發(fā),不斷的修改POM文件和構(gòu)建工程蘑险,這時(shí)候版本同步就成了一個(gè)很大的問(wèn)題滴肿。使用快照就可以達(dá)到這一目的。

其實(shí)在快照版本在發(fā)布的過(guò)程中佃迄,Maven會(huì)自動(dòng)為構(gòu)件以當(dāng)前時(shí)間戳做標(biāo)記泼差,有了這個(gè)時(shí)間戳贵少,我們就可以隨時(shí)找到最新的快照版本,這樣也就解決剛才說(shuō)的 協(xié)作開發(fā)的問(wèn)題堆缘。

至于A如何檢查B的更新滔灶,剛剛在講配置的時(shí)候說(shuō)過(guò),快照配置中有一個(gè)元素可以控制檢查更新的頻率------updatePolicy

我們也可以使用命令行加參數(shù)的形式強(qiáng)制執(zhí)行讓maven檢查更新:

mvn clean install-U

maven到底是如何從倉(cāng)庫(kù)中解析構(gòu)件的呢吼肥?----maven從倉(cāng)庫(kù)解析依賴的機(jī)制

1. 當(dāng)依賴的范圍是system的時(shí)候录平,Maven直接從本地文件系統(tǒng)解析構(gòu)件

2. 根據(jù)依賴坐標(biāo)計(jì)算倉(cāng)庫(kù)路徑后,嘗試直接從本地倉(cāng)庫(kù)尋找構(gòu)件缀皱,如果發(fā)現(xiàn)相應(yīng)構(gòu)件萄涯,則解析成功

3. 在本地倉(cāng)庫(kù)不存在相應(yīng)的構(gòu)件情況下,如果依賴的版本是顯示的發(fā)布版本構(gòu)件唆鸡,則遍歷所有的遠(yuǎn)程倉(cāng)庫(kù)涝影,發(fā)現(xiàn)后下載使用

4. 如果依賴的版本是RELEASE或LATEST, 則基于更新策略讀取所有遠(yuǎn)程倉(cāng)庫(kù)的元數(shù)據(jù),將其于本地倉(cāng)庫(kù)的對(duì)應(yīng)元數(shù)據(jù)合并后争占,計(jì)算出RELEASE或者LATEST的真實(shí)值燃逻,然后基于這個(gè)真實(shí)值檢查本地倉(cāng)庫(kù)

5. 如果依賴的版本是SNAPSHOT, 則基于更新策略讀取所有遠(yuǎn)程倉(cāng)庫(kù)的元數(shù)據(jù)臂痕, 將其與本地倉(cāng)庫(kù)的對(duì)應(yīng)元數(shù)據(jù)合并后伯襟,得到最新快照版本的值,然后基于該值檢查本地倉(cāng)庫(kù)或從遠(yuǎn)程倉(cāng)庫(kù)下載

6. 如果最后解析到的構(gòu)件版本是時(shí)間戳格式的快照握童,則復(fù)制其時(shí)間戳格式的文件 至 非時(shí)間戳格式姆怪,并使用該非時(shí)間戳格式的構(gòu)件

注:一定要記得<release> <enabled> & <snapshot> <enabled> ,對(duì)于快照也是一樣

在POM的依賴聲明的時(shí)候不推薦使用LATEST & RELEASE, 在Maven3中也不再支持在插件配置中使用LATEST & RELEASE澡绩, 如果不設(shè)置插件版本稽揭,那么最終版本和release一樣,

maven只會(huì)解析最新的發(fā)布版本構(gòu)建肥卡。

1.遠(yuǎn)程倉(cāng)庫(kù)的配置

在平時(shí)的開發(fā)中溪掀,我們往往不會(huì)使用默認(rèn)的中央倉(cāng)庫(kù),默認(rèn)的中央倉(cāng)庫(kù)訪問(wèn)的速度比較慢步鉴,訪問(wèn)的人或許很多揪胃,有時(shí)候也無(wú)法滿足我們項(xiàng)目的需求,可能項(xiàng)目需要的某些構(gòu)件中央倉(cāng)庫(kù)中是沒(méi)有的氛琢,而在其他遠(yuǎn)程倉(cāng)庫(kù)中有喊递,如JBoss Maven倉(cāng)庫(kù)。這時(shí)阳似,可以在pom.xml中配置該倉(cāng)庫(kù)骚勘,代碼如下:

<!-- 配置遠(yuǎn)程倉(cāng)庫(kù) -->
    <repositories>
        <repository>
            <id>jboss</id>
            <name>JBoss Repository</name>
            <url>http://repository.jboss.com/maven2/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
                <checksumPolicy>warn</checksumPolicy>
            </snapshots>
            <layout>default</layout>
        </repository>
    </repositories>

repository:在repositories元素下,可以使用repository子元素聲明一個(gè)或者多個(gè)遠(yuǎn)程倉(cāng)庫(kù)障般。

id:倉(cāng)庫(kù)聲明的唯一id调鲸,尤其需要注意的是,Maven自帶的中央倉(cāng)庫(kù)使用的id為central挽荡,如果其他倉(cāng)庫(kù)聲明也使用該id藐石,就會(huì)覆蓋中央倉(cāng)庫(kù)的配置。

name:倉(cāng)庫(kù)的名稱定拟,讓我們直觀方便的知道倉(cāng)庫(kù)是哪個(gè)于微,暫時(shí)沒(méi)發(fā)現(xiàn)其他太大的含義。

url:指向了倉(cāng)庫(kù)的地址青自,一般來(lái)說(shuō)株依,該地址都基于http協(xié)議,Maven用戶都可以在瀏覽器中打開倉(cāng)庫(kù)地址瀏覽構(gòu)件延窜。

releases和snapshots:用來(lái)控制Maven對(duì)于發(fā)布版構(gòu)件和快照版構(gòu)件的下載權(quán)限恋腕。需要注意的是enabled子元素,該例中releases的enabled值為true逆瑞,表示開啟JBoss倉(cāng)庫(kù)的發(fā)布版本下載支持荠藤,而snapshots的enabled值為false,表示關(guān)閉JBoss倉(cāng)庫(kù)的快照版本的下載支持获高。根據(jù)該配置哈肖,Maven只會(huì)從JBoss倉(cāng)庫(kù)下載發(fā)布版的構(gòu)件,而不會(huì)下載快照版的構(gòu)件念秧。

layout:元素值default表示倉(cāng)庫(kù)的布局是Maven2及Maven3的默認(rèn)布局淤井,而不是Maven1的布局√海基本不會(huì)用到Maven1的布局币狠。

其他:對(duì)于releases和snapshots來(lái)說(shuō),除了enabled砾层,它們還包含另外兩個(gè)子元素updatePolicy和checksumPolicy总寻。

元素updatePolicy用來(lái)配置Maven從遠(yuǎn)處倉(cāng)庫(kù)檢查更新的頻率,默認(rèn)值是daily梢为,表示Maven每天檢查一次渐行。其他可用的值包括:never-從不檢查更新;always-每次構(gòu)建都檢查更新铸董;interval:X-每隔X分鐘檢查一次更新(X為任意整數(shù))祟印。

元素checksumPolicy用來(lái)配置Maven檢查校驗(yàn)和文件的策略。當(dāng)構(gòu)建被部署到Maven倉(cāng)庫(kù)中時(shí)粟害,會(huì)同時(shí)部署對(duì)應(yīng)的檢驗(yàn)和文件蕴忆。在下載構(gòu)件的時(shí)候,Maven會(huì)驗(yàn)證校驗(yàn)和文件悲幅,如果校驗(yàn)和驗(yàn)證失敗套鹅,當(dāng)checksumPolicy的值為默認(rèn)的warn時(shí)站蝠,Maven會(huì)在執(zhí)行構(gòu)建時(shí)輸出警告信息,其他可用的值包括:fail-Maven遇到校驗(yàn)和錯(cuò)誤就讓構(gòu)建失斪柯埂菱魔;ignore-使Maven完全忽略校驗(yàn)和錯(cuò)誤。

2.遠(yuǎn)程倉(cāng)庫(kù)的認(rèn)證

大部分公共的遠(yuǎn)程倉(cāng)庫(kù)無(wú)須認(rèn)證就可以直接訪問(wèn)吟孙,但我們?cè)谄綍r(shí)的開發(fā)中往往會(huì)架設(shè)自己的Maven遠(yuǎn)程倉(cāng)庫(kù)澜倦,出于安全方面的考慮,我們需要提供認(rèn)證信息才能訪問(wèn)這樣的遠(yuǎn)程倉(cāng)庫(kù)杰妓。配置認(rèn)證信息和配置遠(yuǎn)程倉(cāng)庫(kù)不同藻治,遠(yuǎn)程倉(cāng)庫(kù)可以直接在pom.xml中配置,但是認(rèn)證信息必須配置在settings.xml文件中巷挥。這是因?yàn)閜om往往是被提交到代碼倉(cāng)庫(kù)中供所有成員訪問(wèn)的桩卵,而settings.xml一般只存在于本機(jī)。因此倍宾,在settings.xml中配置認(rèn)證信息更為安全吸占。

<settings>
      <!--配置遠(yuǎn)程倉(cāng)庫(kù)認(rèn)證信息-->
       <servers>
          <server>
              <id>releases</id>
             <username>admin</username>
             <password>admin123</password>
          </server>
      </servers>
  </settings>

上面代碼我們配置了一個(gè)id為releases的遠(yuǎn)程倉(cāng)庫(kù)認(rèn)證信息。Maven使用settings.xml文件中的servers元素及其子元素server配置倉(cāng)庫(kù)認(rèn)證信息凿宾。認(rèn)證用戶名為admin矾屯,認(rèn)證密碼為admin123。這里的關(guān)鍵是id元素初厚,settings.xml中server元素的id必須與pom.xml中需要認(rèn)證的repository元素的id完全一致件蚕。正是這個(gè)id將認(rèn)證信息與倉(cāng)庫(kù)配置聯(lián)系在了一起。

3.部署構(gòu)件至遠(yuǎn)程倉(cāng)庫(kù)

我們使用自己的遠(yuǎn)程倉(cāng)庫(kù)的目的就是在遠(yuǎn)程倉(cāng)庫(kù)中部署我們自己項(xiàng)目的構(gòu)件以及一些無(wú)法從外部倉(cāng)庫(kù)直接獲取的構(gòu)件产禾。這樣才能在開發(fā)時(shí)排作,供其他對(duì)團(tuán)隊(duì)成員使用。

Maven除了能對(duì)項(xiàng)目進(jìn)行編譯亚情、測(cè)試妄痪、打包之外,還能將項(xiàng)目生成的構(gòu)件部署到遠(yuǎn)程倉(cāng)庫(kù)中楞件。首先衫生,需要編輯項(xiàng)目的pom.xml文件。配置distributionManagement元素土浸,代碼如下:

<distributionManagement>
        <repository>
            <id>releases</id>
            <name>public</name>
            <url>http://59.50.95.66:8081/nexus/content/repositories/releases</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url>http://59.50.95.66:8081/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
</distributionManagement>

distributionManagement包含repository和snapshotRepository子元素罪针,前者表示發(fā)布版本(穩(wěn)定版本)構(gòu)件的倉(cāng)庫(kù),后者表示快照版本(開發(fā)測(cè)試版本)的倉(cāng)庫(kù)黄伊。這兩個(gè)元素都需要配置id泪酱、name和url,id為遠(yuǎn)程倉(cāng)庫(kù)的唯一標(biāo)識(shí),name是為了方便人閱讀墓阀,關(guān)鍵的url表示該倉(cāng)庫(kù)的地址毡惜。

往遠(yuǎn)程倉(cāng)庫(kù)部署構(gòu)件的時(shí)候,往往需要認(rèn)證斯撮,配置認(rèn)證的方式同上经伙。

配置正確后,運(yùn)行命令mvn clean deploy吮成,Maven就會(huì)將項(xiàng)目構(gòu)建輸出的構(gòu)件部署到配置對(duì)應(yīng)的遠(yuǎn)程倉(cāng)庫(kù)橱乱,如果項(xiàng)目當(dāng)前的版本是快照版本辜梳,則部署到快照版本的倉(cāng)庫(kù)地址粱甫,否則就部署到發(fā)布版本的倉(cāng)庫(kù)地址。

快照版本和發(fā)布版本的區(qū)別請(qǐng)自行上百度查閱資料作瞄。

4.配置遠(yuǎn)程倉(cāng)庫(kù)的鏡像

如果倉(cāng)庫(kù)X可以提供倉(cāng)庫(kù)Y存儲(chǔ)的所有內(nèi)容茶宵,那么就可以認(rèn)為X是Y的一個(gè)鏡像。換句話說(shuō)宗挥,任何一個(gè)可以從倉(cāng)庫(kù)Y獲得的構(gòu)件乌庶,都能夠從它的鏡像中獲取。舉個(gè)例子契耿,http://maven.oschina.net/content/groups/public/ 是中央倉(cāng)庫(kù)http://repo1.maven.org/maven2/ 在中國(guó)的鏡像瞒大,由于地理位置的因素,該鏡像往往能夠提供比中央倉(cāng)庫(kù)更快的服務(wù)搪桂。因此透敌,可以配置Maven使用該鏡像來(lái)替代中央倉(cāng)庫(kù)。編輯settings.xml踢械,代碼如下:

<mirrors>
     <mirror>
      <id>maven.oschina.net</id>
      <name>maven mirror in China</name>
      <url>http://maven.oschina.net/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

該例中酗电,mirrorOf的值為central,表示該配置為中央倉(cāng)庫(kù)的鏡像内列,任何對(duì)于中央倉(cāng)庫(kù)的請(qǐng)求都會(huì)轉(zhuǎn)至該鏡像撵术,用戶也可以使用同樣的方法配置其他倉(cāng)庫(kù)的鏡像。id表示鏡像的唯一標(biāo)識(shí)符话瞧,name表示鏡像的名稱嫩与,url表示鏡像的地址。

關(guān)于鏡像的一個(gè)更為常見(jiàn)的用法是結(jié)合私服交排。由于私服可以代理任何外部的公共倉(cāng)庫(kù)(包括中央倉(cāng)庫(kù))蕴纳,因此,對(duì)于組織內(nèi)部的Maven用戶來(lái)說(shuō)个粱,使用一個(gè)私服地址就等于使用了所有需要的外部倉(cāng)庫(kù)古毛,這可以將配置集中到私服,從而簡(jiǎn)化Maven本身的配置。在這種情況下稻薇,任何需要的構(gòu)件都可以從私服獲得嫂冻,私服就是所有倉(cāng)庫(kù)的鏡像。這時(shí)塞椎,可以配置這樣的一個(gè)鏡像:

<!--配置私服鏡像-->
<mirrors> 
    <mirror>  
        <id>nexus</id>  
        <name>internal nexus repository</name>  
        <url>http://183.238.2.182:8081/nexus/content/groups/public/</url>  
        <mirrorOf>*</mirrorOf>  
    </mirror>  
</mirrors>

該例中<mirrorOf>的值為星號(hào)桨仿,表示該配置是所有Maven倉(cāng)庫(kù)的鏡像,任何對(duì)于遠(yuǎn)程倉(cāng)庫(kù)的請(qǐng)求都會(huì)被轉(zhuǎn)至http://183.238.2.182:8081/nexus/content/groups/public/案狠。如果該鏡像倉(cāng)庫(kù)需要認(rèn)證服傍,則配置一個(gè)id為nexus的認(rèn)證信息即可。

需要注意的是骂铁,由于鏡像倉(cāng)庫(kù)完全屏蔽了被鏡像倉(cāng)庫(kù)吹零,當(dāng)鏡像倉(cāng)庫(kù)不穩(wěn)定或者停止服務(wù)的時(shí)候,Maven仍將無(wú)法訪問(wèn)被鏡像倉(cāng)庫(kù)拉庵,因而將無(wú)法下載構(gòu)件灿椅。

5.可用的Maven鏡像倉(cāng)庫(kù)

<mirror>    
      <id>repo2</id>    
      <mirrorOf>central</mirrorOf>    
      <name>Human Readable Name for this Mirror.</name>    
      <url>http://repo2.maven.org/maven2/</url>    
    </mirror>

    <mirror>    
      <id>ui</id>    
      <mirrorOf>central</mirrorOf>    
      <name>Human Readable Name for this Mirror.</name>    
     <url>http://uk.maven.org/maven2/</url>    
    </mirror>

  
    <mirror>    
      <id>ibiblio</id>    
      <mirrorOf>central</mirrorOf>    
      <name>Human Readable Name for this Mirror.</name>    
     <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>    
    </mirror>

    <mirror>    
      <id>jboss-public-repository-group</id>    
      <mirrorOf>central</mirrorOf>    
      <name>JBoss Public Repository Group</name>    
     <url>http://repository.jboss.org/nexus/content/groups/public</url>    
    </mirror>

    <mirror>    
      <id>JBossJBPM</id>   
    <mirrorOf>central</mirrorOf>   
    <name>JBossJBPM Repository</name>   
    <url>https://repository.jboss.org/nexus/content/repositories/releases/</url>  
    </mirror>

上面的倉(cāng)庫(kù)經(jīng)過(guò)測(cè)試是可以訪問(wèn)的。

6.倉(cāng)庫(kù)搜索服務(wù)地址

Sonatype Nexus:https://repository.sonatype.org/

MVNrepository:http://mvnrepository.com/

關(guān)于依賴的搜索钞支,個(gè)人覺(jué)得這兩個(gè)是最好用的茫蛹。

結(jié)束語(yǔ):要得到你必須要付出,要付出你還要學(xué)會(huì)堅(jiān)持烁挟,如果你真的覺(jué)得很難婴洼,那你就放棄,但是你放棄了就不要抱怨撼嗓,世界真的是平衡的柬采,我覺(jué)得人生就是這樣,每個(gè)人都是通過(guò)自己的努力静稻,去決定自己生活的樣子警没。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市振湾,隨后出現(xiàn)的幾起案子杀迹,更是在濱河造成了極大的恐慌,老刑警劉巖押搪,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件树酪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡大州,警方通過(guò)查閱死者的電腦和手機(jī)续语,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)厦画,“玉大人疮茄,你說(shuō)我怎么就攤上這事滥朱。” “怎么了力试?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵徙邻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我畸裳,道長(zhǎng)缰犁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任怖糊,我火速辦了婚禮帅容,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伍伤。我一直安慰自己并徘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布嚷缭。 她就那樣靜靜地躺著饮亏,像睡著了一般耍贾。 火紅的嫁衣襯著肌膚如雪阅爽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天荐开,我揣著相機(jī)與錄音付翁,去河邊找鬼。 笑死晃听,一個(gè)胖子當(dāng)著我的面吹牛百侧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播能扒,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼佣渴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了初斑?” 一聲冷哼從身側(cè)響起辛润,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎见秤,沒(méi)想到半個(gè)月后砂竖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹃答,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年乎澄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片测摔。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡置济,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浙于,我是刑警寧澤修噪,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站路媚,受9級(jí)特大地震影響黄琼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜整慎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一脏款、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裤园,春花似錦撤师、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至淤袜,卻和暖如春痒谴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铡羡。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工积蔚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烦周。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓尽爆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親读慎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漱贱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 目前在看nexus私服章節(jié)的知識(shí)時(shí)需要用到倉(cāng)庫(kù)與鏡像的知識(shí)幅狮,正好通過(guò)簡(jiǎn)書把倉(cāng)庫(kù)和鏡像章節(jié)的筆記整理一下 倉(cāng)庫(kù) ma...
    小煉君閱讀 1,288評(píng)論 0 48
  • 五. 倉(cāng)庫(kù) 在Maven中,任何一個(gè)依賴闰靴、插件或者項(xiàng)目構(gòu)建的輸出彪笼,都可以稱之為 構(gòu)件。Maven在某個(gè)統(tǒng)一的位置存...
    wind_sky閱讀 1,471評(píng)論 0 0
  • 在 Maven 的術(shù)語(yǔ)中蚂且,倉(cāng)庫(kù)是一個(gè)位置(place)配猫。Maven 倉(cāng)庫(kù)是項(xiàng)目中依賴的第三方庫(kù),這個(gè)庫(kù)所在的位置叫...
    41uLove閱讀 6,979評(píng)論 2 3
  • 在Maven世界中杏死,依賴泵肄、插件捆交、項(xiàng)目構(gòu)建完成后輸出的jar包都可以看作是一個(gè)構(gòu)件,任何一個(gè)構(gòu)件都有一組坐標(biāo)唯一標(biāo)識(shí)...
    SonyaBaby閱讀 610評(píng)論 0 0
  • 1.遠(yuǎn)程倉(cāng)庫(kù)的配置 在平時(shí)的開發(fā)中腐巢,我們往往不會(huì)使用默認(rèn)的中央倉(cāng)庫(kù)品追,默認(rèn)的中央倉(cāng)庫(kù)訪問(wèn)的速度比較慢,訪問(wèn)的人或許很...
    followtry閱讀 11,259評(píng)論 3 4