坐標(biāo)和構(gòu)建是一個(gè)構(gòu)件在Maven世界中的邏輯表示方式,而其物理表示方式是文件。
Maven通過(guò)倉(cāng)庫(kù)來(lái)統(tǒng)一管理這些文件
什么是Maven倉(cāng)庫(kù)?
在Maven世界中,任何一個(gè)依賴(lài),插件或者項(xiàng)目構(gòu)建的輸出,都可以稱(chēng)為構(gòu)建,任何一個(gè)構(gòu)建都有一組坐標(biāo)唯一標(biāo)識(shí)。
得益于坐標(biāo)機(jī)制,任何Maven項(xiàng)目使用任何一個(gè)構(gòu)件的方式都是完全相同的,在此基礎(chǔ)上,Maven可以在某個(gè)位置統(tǒng)一存儲(chǔ)所有Maven項(xiàng)目共享的構(gòu)件,這個(gè)統(tǒng)一的位置就是倉(cāng)庫(kù).
這樣Maven項(xiàng)目就可以不再各自存儲(chǔ)其依賴(lài)文件,只需要聲明這些依賴(lài)的坐標(biāo),在需要的時(shí)候,Maven會(huì)自動(dòng)根據(jù)坐標(biāo)找到倉(cāng)庫(kù)中的構(gòu)件并使用。
倉(cāng)庫(kù)的分類(lèi)
對(duì)于Maven來(lái)說(shuō),倉(cāng)庫(kù)分為兩類(lèi):本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)
使用順序?yàn)?,先查找本地倉(cāng)庫(kù),若不存在或要尋找更高的版本,則到遠(yuǎn)程倉(cāng)庫(kù)中尋找到后,下載到本地倉(cāng)庫(kù)再使用,如果都沒(méi)有,則報(bào)錯(cuò)
本地倉(cāng)庫(kù)
一般情況下,在Maven項(xiàng)目目錄下,沒(méi)有諸如lib/這樣用來(lái)存放依賴(lài)文件的目錄。
當(dāng)Maven在執(zhí)行編譯或測(cè)試時(shí),如果需要使用依賴(lài)文件,它總是基于坐標(biāo)使用本地倉(cāng)庫(kù)的依賴(lài)文件
一般情況下,每個(gè)用戶(hù)在自己的用戶(hù)目錄下都有一個(gè)路徑名為.m2/repository/的倉(cāng)庫(kù)目錄
遠(yuǎn)程倉(cāng)庫(kù)
遠(yuǎn)程倉(cāng)庫(kù)有很多:
- 中央倉(cāng)庫(kù):默認(rèn)的遠(yuǎn)程倉(cāng)庫(kù),Maven的安裝文件自帶了中央倉(cāng)庫(kù)的配置,包含了這個(gè)世界上絕大多數(shù)流行的開(kāi)源Java構(gòu)件
-
私服:一種特殊的遠(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用戶(hù)使用
私服的用途
遠(yuǎn)程倉(cāng)庫(kù)的那些事
遠(yuǎn)程倉(cāng)庫(kù)的配置
<project>
...
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
</project>
- updatePolicy 用來(lái)配置Maven從遠(yuǎn)程倉(cāng)庫(kù)檢查更新的頻率
- checksumPolicy 用來(lái)配置Maven檢查檢驗(yàn)和文件的策略
遠(yuǎn)程倉(cāng)庫(kù)的認(rèn)證
大部分遠(yuǎn)程倉(cāng)庫(kù)無(wú)須認(rèn)證就可以訪(fǎng)問(wèn),但有時(shí)處于安全方面的考慮,需要提供一些認(rèn)證信息才能訪(fǎng)問(wèn)一些遠(yuǎn)程倉(cāng)庫(kù)。
配置認(rèn)證信息應(yīng)該在settings.xml中,而不是POM中(因?yàn)閟ettings.xml一般只放在本機(jī)中)
<settings>
...
<servers>
<server>
<id>my-proj</id>
<username>repo-user</username>
<password>repo-pwd</password>
</server>
</servers>
</settings>
這里的id需要和pom中的id相同
部署至遠(yuǎn)程倉(cāng)庫(kù)
<project>
...
<distributionManagement>
<repository>
<id>proj-release</id>
<name>Proj Release Repository</name>
<url>http://192.168.1.100/content/repositories/proj-releases</url>
</repository>
<snapshotRepository>
<id>proj-snapshots</id>
<name>Proj Snapshots Repository</name>
<url>http://192.168.1.100/content/repositories/proj-snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>
然后執(zhí)行mvn clean deploy,Maven將會(huì)將項(xiàng)目構(gòu)建輸出的構(gòu)建部署到配置對(duì)應(yīng)的遠(yuǎn)程倉(cāng)庫(kù)
快照版本
快照版本對(duì)應(yīng)了大量的帶有不同時(shí)間戳的構(gòu)建。
快照版本只應(yīng)該在組織內(nèi)部的項(xiàng)目或模塊間依賴(lài)使用
