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/