本節(jié)主要介紹如何配置 Maven 倉庫底桂,發(fā)布 jar 包到 Maven 倉庫
Maven 倉庫是什么植袍?
Maven 倉庫用來存儲絕大部分的開源 Jar 包,當(dāng)你在 pom.xml 文件中使用 dependency 元素引入某個依賴時籽懦,Maven 會自動從倉庫內(nèi)下載相關(guān) Jar 包于个。
Maven 倉庫有哪些
本地倉庫
本地倉庫指的是 ${user_home}/.m2/repository/,Maven 默認(rèn)會先從本地倉庫內(nèi)尋找所需 Jar 包猫十。如果本地倉庫不存在览濒,Maven 才會向遠(yuǎn)程倉庫請求下載,同時緩存到本地倉庫拖云。
遠(yuǎn)程倉庫
- 私服
為了節(jié)省資源,一般是局域網(wǎng)內(nèi)設(shè)置的私有服務(wù)器应又,當(dāng)本地倉庫內(nèi)不存在 Maven 所需 Jar 包時宙项,會先去私服上下載 Jar 包。 - 中央倉庫
是 Maven 自帶的遠(yuǎn)程倉庫株扛,不需要特殊配置尤筐。如果私服上也不存在 Maven 所需 Jar 包,那么就去中央倉庫上下載 Jar 包洞就,同時緩存在私服和本地倉庫盆繁。
配置遠(yuǎn)程 Maven 倉庫
一般情況下,配置遠(yuǎn)程 Maven 倉庫分為兩種:配置私服旬蟋,每家公司都會配置自己的 Maven 私服倉庫油昂,這樣可以節(jié)省流量,提高效率倾贰;配置第三方公共庫冕碟。
配置私服
私服的配置一般是適用某個用戶的,那么可以把它存放到 .m2/settings.xml 文件中匆浙。
<settings>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus-releases</id>
<name>local private releases repository</name>
<url>${maven release repository url}</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<name>local private snapshots</name>
<url>${maven snapshot repository url}</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
......
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
<servers>
<server>
<id>nexus-releases</id>
<username>${username}</username>
<password>${password}</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>${username}</username>
<password>${password}</password>
</server>
</servers>
</settings>
- profile
是將 repository, pluginRepository, properties, activation 一組元素組合成一個整體來使用安寺,其中 repository 指向某個私服。 - activeProfiles
激活 profile - server
是用來配置 repository首尼,pluginRepository 中的用戶名和密碼挑庶,其中 server id = profile repository id言秸。
配置第三方公共庫
如果某個 Jar 包在第三方公共庫上,該如何配置呢迎捺?這種情況多數(shù)是針對某個項目的特殊需求井仰,而不具有普遍性,因此將該倉庫配置在工程的 pom.xml 文件中破加。
<project>
......
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<layout>default</layout>
<url>${jboss repository url}</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
.....
</project>
發(fā)布 jar 到遠(yuǎn)程倉庫
我們知道如果想發(fā)布 Jar 包的話俱恶,需要執(zhí)行的 Maven 命令是
mvn clean deploy
那么該如何配置將 jar 包發(fā)布到哪個倉庫里呢?這種情況也是項目可見的范舀,所以只需要在工程的 pom.xml 文件內(nèi)配置即可合是。
<project>
......
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Repository</name>
<url>${release respository url}</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Repository</name>
<url>${snapshot repository url}</url>
</snapshotRepository>
</distributionManagement>
......
</project>
其中對應(yīng)倉庫用戶認(rèn)證信息不應(yīng)該保存在 pom.xml 文件內(nèi),而應(yīng)該保存在 .m2/setting.xml 中锭环。其中 server id = repository id
<settings>
......
<servers>
<server>
<id>nexus-releases</id>
<username>${username}</username>
<password>${password}</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>${username}</username>
<password>${password}</password>
</server>
</servers>
......
</settings>
Snapshots vs Releases
一般倉庫至少會分為兩個聪全,Releases 和 Snapshots。
- Releases 倉庫
Releases 是穩(wěn)定版本的倉庫辅辩,一般只有測試運(yùn)行穩(wěn)定的版本才會發(fā)布到 Releases 倉庫上难礼。該版本一旦發(fā)布之后,再次發(fā)布將失敗玫锋,不會覆蓋當(dāng)前版本蛾茉。 - Snapshots 倉庫
Snapshots 是快照版本,一般適用于不穩(wěn)定狀態(tài)撩鹿,版本號多以后綴 -SNAPSHOT 結(jié)尾谦炬。可以多次發(fā)布相同的快照版本节沦,會覆蓋之前發(fā)布的 Jar 包键思。例如:某個 Jar 當(dāng)前穩(wěn)定版本是 1.0.0,那么開發(fā)版本應(yīng)該是 1.0.1-SNAPSHOT甫贯。 - 版本號管理
如果某 Jar 當(dāng)前穩(wěn)定版本是 1.0.0吼鳞,那么下一個不穩(wěn)定版本是 1.0.1-SNAPSHOT,待 1.0.1-SNAPSHOT 版本穩(wěn)定后叫搁,再發(fā)布穩(wěn)定版 1.0.1赔桌。