Maven 倉庫管理

本節主要介紹如何配置 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。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • |-1-更新內容[6.從倉庫解析依賴的機制(重要)] 1Maven倉庫作用 倉庫用來存儲所有項目使用到構件,在ma...
    zlcook閱讀 6,152評論 0 25
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • 。。。
    TCat閱讀 401評論 0 1
  • 人自出生以來便慢慢走向死亡;生命不過短短數十載猶如白駒過隙,匆匆來匆匆離去,曾經一切猶如過眼云煙一般一去不復還,只...
    夜夢情閱讀 146評論 0 0
  • 日復一日,我們往返于住址和工作地點,接觸著再熟悉不過的人和事。突然想著要改變了,未來等著我們給它不一樣的驚喜,就這...
    陌路留香閱讀 139評論 0 1