本節主要介紹如何配置 Maven 倉庫,發布 jar 包到 Maven 倉庫
Maven 倉庫是什么?
Maven 倉庫用來存儲絕大部分的開源 Jar 包,當你在 pom.xml 文件中使用 dependency 元素引入某個依賴時,Maven 會自動從倉庫內下載相關 Jar 包。
Maven 倉庫有哪些
Maven 倉庫
本地倉庫
本地倉庫指的是 ${user_home}/.m2/repository/,Maven 默認會先從本地倉庫內尋找所需 Jar 包。如果本地倉庫不存在,Maven 才會向遠程倉庫請求下載,同時緩存到本地倉庫。
遠程倉庫
- 私服
為了節省資源,一般是局域網內設置的私有服務器,當本地倉庫內不存在 Maven 所需 Jar 包時,會先去私服上下載 Jar 包。 - 中央倉庫
是 Maven 自帶的遠程倉庫,不需要特殊配置。如果私服上也不存在 Maven 所需 Jar 包,那么就去中央倉庫上下載 Jar 包,同時緩存在私服和本地倉庫。
配置遠程 Maven 倉庫
一般情況下,配置遠程 Maven 倉庫分為兩種:配置私服,每家公司都會配置自己的 Maven 私服倉庫,這樣可以節省流量,提高效率;配置第三方公共庫。
配置私服
私服的配置一般是適用某個用戶的,那么可以把它存放到 .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 包在第三方公共庫上,該如何配置呢?這種情況多數是針對某個項目的特殊需求,而不具有普遍性,因此將該倉庫配置在工程的 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>
發布 jar 到遠程倉庫
我們知道如果想發布 Jar 包的話,需要執行的 Maven 命令是
mvn clean deploy
那么該如何配置將 jar 包發布到哪個倉庫里呢?這種情況也是項目可見的,所以只需要在工程的 pom.xml 文件內配置即可。
<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>
其中對應倉庫用戶認證信息不應該保存在 pom.xml 文件內,而應該保存在 .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 是穩定版本的倉庫,一般只有測試運行穩定的版本才會發布到 Releases 倉庫上。該版本一旦發布之后,再次發布將失敗,不會覆蓋當前版本。 - Snapshots 倉庫
Snapshots 是快照版本,一般適用于不穩定狀態,版本號多以后綴 -SNAPSHOT 結尾。可以多次發布相同的快照版本,會覆蓋之前發布的 Jar 包。例如:某個 Jar 當前穩定版本是 1.0.0,那么開發版本應該是 1.0.1-SNAPSHOT。 - 版本號管理
如果某 Jar 當前穩定版本是 1.0.0,那么下一個不穩定版本是 1.0.1-SNAPSHOT,待 1.0.1-SNAPSHOT 版本穩定后,再發布穩定版 1.0.1。