2016年1月18日 星期一

架設自己的 Maven Repository Server(二):發佈專案到 Nexus

在前一篇文章「架設自己的 Maven Repository Server(一):使用 Nexus 架設 Maven Repository Server」中
已經用 Nexus 建好一台非公開的 Maven Repository Server
接下來在這篇中就要把專案發佈到 Nexus 上了。

    在 Nexus 上建立並設定使用者
    1. 在前一篇文章「架設自己的 Maven Repository Server(一):使用 Nexus 架設 Maven Repository Server」完成後,可以從 http://HOST_NAME:8081/nexus 進入 Nexus OSS 的介面。
    2. 以預設的管理員帳號 admin / admin123 登入 Nexus。
    3. 在左手邊的選單中,選擇 Security → Users,進入使用者管理介面。
    4. 點選 Add... → Nexus User 新增一個使用者,其中 Role Management 的部份,可以參考 deployment 這個使用者的權限,給予「Repo: All Repositories (Full Control)」和「Nexus Deployment Role」兩種角色。
    設定專案的 Artifact 以及登入資訊
    設定專案的 pom.xml
    因為在有自建的 Nexus 服務的情況下,要讓專案去跟 Nexus 存取,而非跟 Default Maven Central 存取 因此要在專案的 pom.xml 上先做一些設定。
    1. 設定 Nexus Repository 的路徑
      <project>
       <repositories>
        <repository>
         <id>maven-releases</id>
         <url>http://HOST_NAME:8081/nexus/content/repositories/releases</url>
        </repository>
       </repositories>
      
       <distributionManagement>
        <repository>
         <id>maven-releases</id>
         <url>http://HOST_NAME:8081/nexus/content/repositories/releases</url>
        </repository>
        <snapshotRepository>
         <id>maven-snapshots</id>
         <url>http://HOST_NAME:8081/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
       </distributionManagement>
      </project>
    設定電腦上的 Repository 登入資訊
    在 Maven 的設計中,Repository 是需要驗證的,不過驗證的資訊不會寫在 pom.xml 上,畢竟 Artifact 本身可能是一個公開的 Artifact。
    因此會讓使用者將驗證資訊寫在自己的電腦上,在 build 的階段中,Maven 會自動去讀取設定。
    1. 依照官方文件描述,在使用者資料夾內的 ../.m2/settings.xml 檔案中寫下以下的資訊:
      <settings>
       <servers>
        <server>
         <id>maven-releases</id>
         <username>your-account-1</username>
         <password>your-password-1</password>
        </server>
        <server>
         <id>maven-snapshots</id>
         <username>your-account-2</username>
         <password>your-password-2</password>
        </server>
       </servers>
      </settings>

      其中上述的設定中,是指定當 Maven 遇到 ID 為 maven-releases 時,會使用 your-account-1 / your-password-1 登入
      而當遇到 ID 為 maven-snapshots 時,則會使用 your-account-2 / your-password-2 登入。
    將專案發佈到 Nexus 上
    最後要將專案發佈出去時,只需要執行以下的指令即可!
    mvn clean deploy
    不過這樣在發佈時,會自動執行一次所有的 Unit Test,若有特殊原因不希望他做測試的話,可以加上略過測試的參數:
    mvn clean deploy -Dmaven.test.skip=true
    發佈完成後,在 Nexus 的 releases repository 上,就可以看到剛發佈上來的套件了。

    參考資料:
    1. Getting started with Nexus maven repository manager
    2. Introduction to Repositories
    3. Maven Deploy to Nexus 
    4. How To Publish Software Artifacts To Central Repository
    5. Linux下使用nexus搭建maven私服

    沒有留言: