天天看點

maven使用私服Nexus,以及配置私服Nexus

一、編譯java代碼時,maven和Nexus大體都幹什麼?

maven負責将代碼中涉及到的依賴全部從 Nexus 私服中緩存到自己的本地倉庫中,然後将java代碼轉換成二進制,把代碼中寫的依賴到的類的 jar 包全部下載下傳到服務本地的 lib 目錄中,最後被壓縮成 jar/war 包,壓縮格式是 Zip 。如下圖,利用 file 指令可以看到是 zip 格式的包,解壓後再 BOOT-INF 目錄中用 lib ,lib 下就是所有依賴的 jar 包。

maven使用私服Nexus,以及配置私服Nexus

二、maven 配置私服位址和本地緩存路徑。

<!-- 本地倉庫存儲路徑 -->
     <localRepository>
          /data/base-module/apache-maven-3.6.3/repo
     </localRepository>
     <!-- 私服位址 -->
     <servers>
            <server>
                <id>linke-deploy-release</id>
                <username>admin</username>
                <password>df24tgeg2</password>
            </server>
            <server>
                <id>nexus-deploy-snapshot</id>
                <username>admin</username>
                <password>df24tgeg2</password>
            </server>
      </servers>
           

三、nexus配置。

起 nexus 很簡單,起個 docker 把資料目錄挂載出來即可。

#!/bin/bash

docker run -d \
    -p 8081:8081 --name nexus \
    -v /data/nexus/nexus-data:/nexus-data \
    --restart=always sonatype/nexus3
           

啟動後,浏覽器 ip:port 即可打開,admin 初始密碼在容器中這個檔案内 /nexus-data/admin.password ,即在主控端 /data/nexus/nexus-data/admin.password 檔案内。

nexus 啟動後,在 browse 中,預設有兩個 group 、兩個 proxy 、兩個 hosted 、

maven使用私服Nexus,以及配置私服Nexus

登入後,在設定下的 repositories 菜單中可以檢視每個類型的配置資訊,也可以添加新類型。最常用的一般是 proxy ,對于大多公司而言,group 都使用的是自帶的 maven-public , 私有依賴都上傳在 hosted 中。添加完新的 proxy 後,将這個 proxy 再添加到 maven-public 名字的 group 下。

如圖是歸屬在 maven-public group 下預設的幾個成員

maven使用私服Nexus,以及配置私服Nexus
maven使用私服Nexus,以及配置私服Nexus

 可以看到,在 maven-public 組下,有預設的三個成員。maven-central 是 proxy 類型,代理的公網的依賴源;maven-releases 和 maven-snapshots 都是 hosted 類型,即本地檔案。是以從 maven-public 下可以查詢到這三個成員下所有的依賴 jar 包。

我們可以再看一下自帶的 maven-central ,代理的是 https://repo1.maven.org/maven2/ 倉庫

maven使用私服Nexus,以及配置私服Nexus

當然還有寫别的公網倉庫,如國内的阿裡雲的倉庫,這時我們就需要單獨加一個 proxy ,然後再加到 maven-public 組下。

阿裡雲倉庫彙總位址 https://developer.aliyun.com/mvn/view

maven使用私服Nexus,以及配置私服Nexus

下面我們将上面紅框的 sprint 的倉庫加到私服的代理中,然後加到 maven-public 組下

maven使用私服Nexus,以及配置私服Nexus

 找到 maven2 proxy

maven使用私服Nexus,以及配置私服Nexus

 寫好 Name(最好和公網的私服名字寫一樣) 、Remote storage(複制公網私服的位址)

maven使用私服Nexus,以及配置私服Nexus

 加好後,儲存後就可以看到下圖中的樣子

maven使用私服Nexus,以及配置私服Nexus

 下面将 sprint 這個成員加到  maven-public 中。

maven使用私服Nexus,以及配置私服Nexus
maven使用私服Nexus,以及配置私服Nexus

 加進來以後,使用 maven 編譯時,依賴到這個倉庫的 jar 包就會被拉取到了。注意:剛剛加入時,不被使用的話,在 browse 中是看不到這個倉庫的目錄的,當編譯一次後,這個成員被使用了的話,就可以在 browse 一欄中看到這個倉庫的内容了。

maven使用私服Nexus,以及配置私服Nexus

 當編譯時被調用後,就可以看到了

maven使用私服Nexus,以及配置私服Nexus

四、通過指令上傳依賴包到私服 nexus 中。

上傳 jar 包時,一定要把打這個 jar 包時生成的 pom 檔案一并傳上來。如果不傳編譯 jar 包時自動生成的 pom ,那麼傳到 nexus 上後,該 jar 包會自動生成一個 pom 檔案,但是這個 pom 檔案内的依賴隻有它自己,它依賴到的其它依賴找不到。

1、上傳 jar 包和它的 pom 檔案到私服中。

mvn \
  deploy:deploy-file \
  -Dpackaging=jar \
  -DgroupId=com.winchannel.vitamin \
  -DartifactId=weixin-java-common \
  -Dfile=weixin-java-common-0.0.2-SNAPSHOT-master.jar \
  -Dversion=0.0.2-SNAPSHOT-master \
  -DpomFile=weixin-java-common-0.0.2-SNAPSHOT-master.pom \
  -Durl=http://192.168.1.189:8081/repository/maven-releases/ \
  -DrepositoryId=winchannel-deploy-snapshot \
  -X
           

注解:

deploy:deploy-file   # 動作類型為部署包參數

-Dpackaging=jar    # 上傳包類型是 jar 包

-DgroupId=com.winchannel.vitamin    # 上傳檔案的路徑,對應到 nexus web 中是目錄路徑

-DartifactId=weixin-java-common     # 上傳檔案的包名,對應到 nexus web 中是 com/winchannel/vitamin/weixin-java-common 目錄

-Dversion=0.0.2-SNAPSHOT-master   # 上傳檔案的版本号,對應到 nexus web 中是 com/winchannel/vitamin/weixin-java-common/0.0.2-SNAPSHOT-master 

-Dfile=weixin-java-common-0.0.2-SNAPSHOT-master.jar   # 要上傳的檔案名

-DpomFile=weixin-java-common-0.0.2-SNAPSHOT-master.pom   # 要上傳檔案的 pom 檔案

-Durl=http://192.168.1.189:8081/repository/maven-releases/     # 傳到 nexus 中哪個 hosted 命名下

-DrepositoryId=winchannel-deploy-snapshot    # 使用 maven 工具配置的哪個 server id 進行 nexus 的認證。

-X   # 列印 dbug

上傳完畢後,在 nexus 的 maven-public 中的對應路徑可以看到,前面的路徑不好截圖,自己腦補即可。

maven使用私服Nexus,以及配置私服Nexus
maven使用私服Nexus,以及配置私服Nexus

 2、隻上傳 pod 檔案到私服中。

mvn \
  deploy:deploy-file \
  -Dpackaging=pom \
  -DgroupId=com.winchannel.vitamin \
  -DartifactId=wx-java \
  -Dversion=0.0.2-SNAPSHOT-master \
  -Dfile=wx-java-0.0.2-SNAPSHOT-master.pom \
  -Durl=http://192.168.1.189:8081/repository/maven-releases/ \
  -DrepositoryId=winchannel-deploy-snapshot \
  -X
           

注解:

-Dpackaging=pom     #和上面傳 jar 包不同的是 -Dpackaging 類型是 pom

3、上傳 jar 包到 maven 本地,而不上傳到私服中。

mvn \
  install:install-file \
  -Dpackaging=jar \
  -DgroupId=com.winchannel.vitamin \
  -DartifactId=weixin-java-common \
  -Dfile=weixin-java-common-0.0.2-SNAPSHOT-master.jar \
  -Dversion=0.0.2-SNAPSHOT-master \
  -DpomFile=weixin-java-common-0.0.2-SNAPSHOT-master.pom \
           

 注解:

install:install-file     # 動作類型為安裝包參數

-Durl 、 -DrepositoryId    # 和私服相關的這兩個參數不需要

上傳完畢後,在 maven 的本地 repo 目錄下的 com/winchannel/vitamin 可以檢視到