maven依賴庫和發佈庫配置

遷移庫

製品庫和依賴庫遷移地址:arttest.maven.com.cn

該製品庫中已經將老的製品庫中的public-maven-remote庫遷移過來,部分依賴可以通過該庫進行下載。

新建了一個部門的maven庫vas-release-maven,存放遠程庫無法下載的平臺提供jar包,平臺提供的jar直接使用maven座標是無法在maven庫中進行,可以先把該jar包deploy到vas-release-maven庫中,然後使用座標在maven 中依賴就可以了。爲了方便開發人員引用,已要求製品庫管理員爲我們創建了一個虛庫vas-maven-virtual,該庫關聯了vas-release-maven和public-maven-remote兩個庫。使用該庫就可以實現maven遠程庫和本地部門庫的雙層引用,兩全其美。

maven依賴庫配置

由於切換了製品庫,需要將maven的settings.xml文件中配置的倉庫地址進行修改.(建議該配置僅在settings.xml中,將每個工程的pom.xml相關配置去除)

  <profiles>
    <profile>
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>vas-maven-virtual</name>
          <url>https://arttest.maven.com.cn:443/artifactory/vas-maven-virtual</url>
        </repository>
        <repository>
          <snapshots />
          <id>snapshots</id>
          <name>vas-maven-virtual</name>
          <url>https://arttest.maven.com.cn:443/artifactory/vas-maven-virtual</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>vas-maven-virtual</name>
          <url>https://arttest.maven.com.cn:443/artifactory/vas-maven-virtual</url>
        </pluginRepository>
        <pluginRepository>
          <snapshots />
          <id>snapshots</id>
          <name>vas-maven-virtual</name>
          <url>https://arttest.maven.com.cn:443/artifactory/vas-maven-virtual</url>
        </pluginRepository>
      </pluginRepositories>
      <id>artifactory</id>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>artifactory</activeProfile>
  </activeProfiles>

maven發佈庫配置

部分項目可能會開發二方庫,給其他項目使用,之前的做法可能有以下兩點:

  1. 項目發佈一個jar包,然後其他項目把該jar包拿過來使用(每次升級都要對該jar進行替換)。
  2. 項目發佈jar包,手動上傳到公共庫vas-release-maven中(每次升級均需要手動上傳),其他項目使用該jar時直接通過座標使用。

如之前在某個項目開發過類似服務註冊的starter模塊,該模塊爲每個微服務提供註冊服務信息的功能。以往的做法是register模塊作爲單獨的工程開發,與主版本不在同一個基線下。每次修改register模塊,均需要將該jar包放到主版本基線的lib目錄下,在主版本編譯時手動執行mvn clean install方法將該jar安裝在本地maven倉庫中。

這是一種比較容易想到的但是卻是比較麻煩的一種方法。

這裏提供了一個方法,可以在二方庫開發時,直接發佈到vas-release-maven中,在修改完register模塊後直接執行mvn clean deploy命令進行發佈。主版本不用做任何修改,仍然通過座標的方式就可以引用到修改後的模塊包。

這裏需要增加兩個配置

  1. 需要在待發布工廠的pom.xml文件中增加發布庫的配置如下:
    <distributionManagement>
        <repository>
            <id>central</id>
            <name>arttest-releases</name>
            <url>https://arttest.maven.com.cn:443/artifactory/vas-release-maven</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>arttest-snapshots</name>
            <url>https://arttest.maven.com.cn:443/artifactory/vas-release-maven</url>
        </snapshotRepository>
    </distributionManagement>
  1. 需要在maven的配置文件settings.xml中配置發佈庫的認證信息,也就是你要有可以發佈的權限,,注意這裏的id配置必須和上面的一直,否則發佈時會報認證失敗的錯誤.
  <servers>
    <server>
	  <id>central</id>
	  <username>10191192</username>
	  <password>******</password>
    </server>
  
    <server>
	  <id>snapshots</id>
	  <username>10191192</username>
	  <password>******</password>
    </server>
  </servers>

但是這個地方存在一個問題是,當主版本從遠程倉庫中拉取register模塊後,會在本地庫中緩存,此時如果register模塊更新發布,那如何在主版本中每次取到的都是遠程庫中最新的呢?這就涉及到mavn的機制了:倉庫一般分爲public(Release)倉和SNAPSHOT倉,前者存放正式版本,後者存放快照版本。如果在項目配置文件中(無論是build.gradle還是pom.xml)指定的版本號帶有’-SNAPSHOT’後綴,那麼打出的包就是一個快照版本。快照版本和正式版本的主要區別在於,本地獲取這些依賴的機制有所不同。

假設有兩個小組負責維護兩個組件,example-service和example-ui,其中example-ui項目依賴於example-service。而這兩個項目每天都會構建多次,如果每次構建你都要升級example-service的版本,那麼你會瘋掉。這個時候SNAPSHOT版本就派上用場了。每天日常構建時你可以構建example-service的快照版本,比如example-service-1.0-SNAPSHOT.jar,而example-ui依賴該快照版本。每次example-ui構建時,會優先去遠程倉庫中查看是否有最新的example-service-1.0-SNAPSHOT.jar,如果有則下載下來使用。即使本地倉庫中已經有了example-service-1.0-SNAPSHOT.jar,它也會嘗試去遠程倉庫中查看同名的jar是否是最新的。有的人可能會問,這樣不就不能充分利用本地倉庫的緩存機制了嗎?彆着急,Maven比我們想象中的要聰明。在配置Maven的Repository的時候中有個配置項,可以配置對於SNAPSHOT版本向遠程倉庫中查找的頻率。頻率共有四種,分別是always、daily、interval、never。當本地倉庫中存在需要的依賴項目時,always是每次都去遠程倉庫查看是否有更新,daily是隻在第一次的時候查看是否有更新,當天的其它時候則不會查看;interval允許設置一個分鐘爲單位的間隔時間,在這個間隔時間內只會去遠程倉庫中查找一次,never是不會去遠程倉庫中查找(這種就和正式版本的行爲一樣了)

<repository>
    <id>myRepository</id>
    <url>...</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>XXX</updatePolicy>
    </snapshots>
</repository>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章