1. 程式人生 > 其它 >Nexus3建立maven私服

Nexus3建立maven私服

關注我 「Java之康莊大道」精彩文章第一時間推送給你

bin目錄下啟動 | 停止

./nexus start | stop

使用者名稱密碼

admin 初始密碼在倉庫路徑中sonatype-work的admin.password檔案中,啟動成功之後就可以訪問localhost:{port},填入初始密碼之後admin.password檔案就失效了,系統會要求設定新密碼

配置

如果你只用於一個專案,可以在pom中配置

<repositories>
    <repository>
        <id>maven-nexus</id>
        <name>maven-nexus</name>
        <url>http://ip:8081/repository/maven-public/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>

如果多個專案中,可以直接在 settings.xml中配置

    <profiles>
        <!--單個倉庫配置,可配置多個-->
        <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>my-nexus</id>
                    <name>Nexus</name>
                    <url>http://ip:8081/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>
    <!--選擇哪個倉庫配置生效-->
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>

釋出配置

首先配置賬戶密碼在 settings.xml

  <servers> 
	  <server>  
      <id>releases</id>  
      <username>admin</username>  
      <password>admin123</password>  
	  </server>  
	  <server>  
      <id>snapshots</id>  
      <username>admin</username>  
      <password>admin123</password>  
	  </server>
  </servers>

在pom中配置

<distributionManagement>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Nexus Snapshot</name>
            <url>http://ip:8081/repository/maven-snapshots</url>
        </snapshotRepository>
        <repository>
            <id>releases</id>
            <name>Nexus Release</name>
            <url>http://ip:8081/repository/maven-releases</url>
        </repository>
    </distributionManagement>

然後執行下面的命令跳過測試打包釋出到私服

mvn clean deploy -Dmaven.test.skip=true

目錄介紹

簡單說一下這些倉庫是幹嘛的:

  • maven-central:注意這個型別是proxy,這是一個遠端倉庫的代理。什麼意思呢?就是說如果私服中不存在我們要下的jar包,它會從遠端倉庫中下載過來放在這個倉庫,預設是從Maven中央倉庫下載,http://repo1.maven.org/maven2/,我覺得可以配置從國內映象下載,要不然第一次從私服下載還是會很慢。試了一下沒成功,可能是我沒配好,有興趣可以試一下。

  • maven-public:這個倉庫型別是group,表示是一個組,也就是可以是其他幾個倉庫的組合,為了可以對外提供一個統一的地址。預設包括maven-central,maven-releases,maven-snapshots 這三個倉庫。

  • maven-releases:倉庫型別是hosted,表示是一個宿主倉庫,我們自己專案的構件就可以放在這個倉庫,也可以放第三方的jar包,注意這個倉庫放的是release版本的。

  • maven-snapshots:這個倉庫也是hosted,跟上面那個一樣,不同的是這個倉庫放的是snapshot版本。

再說一下release 和 snapshot 的區別

release 表示的是穩定版,snapshot是一個開發中的快照版。

假如你的同伴依賴你的模組進行開發,如果你沒有用snapshot,那麼你每次修改完程式碼釋出到私服中,你的同伴都需要把本地倉庫的jar包先刪掉再重新更新才會是最新的程式碼,或者你在釋出到私服之前每次都要修改POM檔案的版本號,顯然這是不合理的。但是如果用了snapshot版的話,釋出到私服中的jar包名字後面會自動帶有時間戳。這個時候你的同伴就能自動更新最新的snapshot版本。

新增阿里雲和第三方庫

阿里雲庫遠端位置http://maven.aliyun.com/nexus/content/groups/public 選擇proxy
第三方庫需要選擇Allow redeploy允許部署和更新,選擇 hosted

如上圖所示,私服依賴按照前後順序排好,按照此順序進行引用依賴。

介紹三個型別庫

  • hosted,本地倉庫,通常我們會部署自己的構件到這一型別的倉庫。比如公司的第二方庫。

  • proxy,代理倉庫,它們被用來代理遠端的公共倉庫,如maven中央倉庫。

  • group,倉庫組,用來合併多個hosted/proxy倉庫,當你的專案希望在多個repository使用資源時就不需要多次引用了,只需要引用一個group即可。

映象設定

映象會對倉庫的請求進行過濾,也就是說當我們下載依賴的時候,如果映象中存在,就直接從映象中下載。
國內阿里的映象:

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

id:是映象的標識
mirrorOf:被映象倉庫的id,例如central標識替代中央倉庫,google標識替代谷歌套件倉庫

  • 問題1:那麼就產生一個問題了,都已經有倉庫了為什麼需要映象呢?

我理解的映象其實就是對倉庫的集合。可以一次性解決多個倉庫的配置。

  • 問題2:那麼我們直接配置映象了,還需要配置倉庫嗎?有時候需要

比如,映象中不存在對應的依賴,那我們就要獨立配置倉庫了,還有就是我們要上傳jar也要配置倉庫。

  • 問題3:這麼多途徑獲取依賴,那麼一個依賴到底從哪裡途徑獲取呢?

首先本地倉庫沒有,然後要經過映象,沒有,找自己配置的倉庫,如果沒有再去找中央倉庫。

如何把本地maven庫上傳nexus3私服

  • 建立一個hosted型別的maven2倉庫在nexus3上,比如叫做my-repo

  • 設定Version policy 為 Mixed

  • 設定Deployment policy 為 Allow redeploy

  • 可以把my-repo 加到 maven-public裡

  • 在本地maven庫需要上傳的根目錄下建立檔案

    vi mavenimport.sh
    
  • 檔案內容如下

    #!/bin/bash
    # copy and run this script to the root of the repository directory containing files
    # this script attempts to exclude uploading itself explicitly so the script name is important
    # Get command line params
    while getopts ":r:u:p:" opt; do
        case $opt in
            r) REPO_URL="$OPTARG"
            ;;
            u) USERNAME="$OPTARG"
            ;;
            p) PASSWORD="$OPTARG"
            ;;
        esac
    done
      
    find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
    
  • 給檔案新增可執行許可權

chmod +x mavenimport.sh
  • 執行如下命令即可上傳本地maven庫到nexus3
./mavenimport.sh -u admin -p password -r http://127.0.0.1:8081/repository/my-repo/