Nexus、Maven倉(cāng)庫(kù)介紹以及在項(xiàng)目中使用Maven私服

Nexus 是一個(gè)強(qiáng)大的倉(cāng)庫(kù)管理器,極大地簡(jiǎn)化了內(nèi)部倉(cāng)庫(kù)的維護(hù)和外部倉(cāng)庫(kù)的訪問。

2016 年 4 月 6 日 Nexus 3.0 版本發(fā)布,相較 2.x 版本有了很大的改變:

  • 對(duì)低層代碼進(jìn)行了大規(guī)模重構(gòu),提升性能,增加可擴(kuò)展性以及改善用戶體驗(yàn)。
  • 升級(jí)界面,極大的簡(jiǎn)化了用戶界面的操作和管理。
    提供新的安裝包,讓部署更加簡(jiǎn)單。
  • 增加對(duì) Docker, NeGet, npm, Bower 的支持。
  • 提供新的管理接口,以及增強(qiáng)對(duì)自動(dòng)任務(wù)的管理。

基于Docker安裝Nexus

我們使用 Docker 來安裝和運(yùn)行 Nexus,docker-compose.yml 配置如下:

1. 在Docker 上拉取Nexus鏡像

docker pull sonatype/nexus3

2. 使用docker compose運(yùn)行Nexus,docker-compose.yml的配置如下:

version: '3.1'
services:
  nexus:
    restart: always
    image: sonatype/nexus3
    container_name: nexus
    ports:
       - 8081:8081
    volumes:
       - /usr/local/docker/nexus/data:/nexus-data

注: 啟動(dòng)時(shí)如果出現(xiàn)權(quán)限問題可以使用:chmod 777 /usr/local/docker/nexus/data 賦予數(shù)據(jù)卷目錄可讀可寫的權(quán)限

4. 啟動(dòng)docker-compose

命令如下:

docker-compose up

5. Nexus啟動(dòng)成功

地址:http://ip:port/
nexus默認(rèn)的

用戶名:admin

密碼:admin123

Maven 倉(cāng)庫(kù)介紹

代理倉(cāng)庫(kù)

意為第三方倉(cāng)庫(kù),如:

  • maven-central
  • nuget.org-proxy

版本策略(Version Policy):

  • Release: 正式版本
  • Snapshot: 快照版本
  • Mixed: 混合模式

布局策略(Layout Policy):

  • Strict:嚴(yán)格
  • Permissive:寬松

宿主倉(cāng)庫(kù)(Hosted Repository)

存儲(chǔ)本地上傳的組件和資源的,如:

  • maven-releases
  • maven-snapshots
  • nuget-hosted

部署策略(Deployment Policy):

  • Allow Redeploy:允許重新部署
  • Disable Redeploy:禁止重新部署
  • Read-Only:只讀

倉(cāng)庫(kù)組(Repository Group)

通常包含了多個(gè)代理倉(cāng)庫(kù)和宿主倉(cāng)庫(kù),在項(xiàng)目中只要引入倉(cāng)庫(kù)組就可以下載到代理倉(cāng)庫(kù)和宿主倉(cāng)庫(kù)中的包,如:

  • maven-public
  • nuget-group

在項(xiàng)目中使用Maven私服

Maven settings.xml中添加 Nexus認(rèn)證信息(servers 節(jié)點(diǎn)下):

    <server>
        <id>maven-nexus</id>
        <username>admin</username>
        <password>admin123</password>
    </server>

    <server>
      <id>nexus-releases</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
    
    <server>
      <id>nexus-snapshots</id>
      <username>admin</username>
      <password>admin123</password>
    </server>

pom.xml 中添加如下代碼:

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

注意:

  • pom.xml中的id與servers節(jié)點(diǎn)下的id要匹配
  • 項(xiàng)目版本號(hào)中有SNAPSHOT 標(biāo)識(shí)的,會(huì)發(fā)布到 Nexus Snapshots Repository, 否則發(fā)布到 Nexus Release Repository,并根據(jù) ID 去匹配授權(quán)賬號(hào)。

Snapshots 與 Releases 的區(qū)別

  • nexus-releases: 用于發(fā)布 Release 版本
  • nexus-snapshots: 用于發(fā)布 Snapshot 版本(快照版)
    Release 版本與 Snapshot 定義如下:
Release: 1.0.0/1.0.0-RELEASE
Snapshot: 1.0.0-SNAPSHOT
  • 在項(xiàng)目pom.xml 中設(shè)置的版本號(hào)添加 SNAPSHOT 標(biāo)識(shí)的都會(huì)發(fā)布為SNAPSHOT 版本,沒有 SNAPSHOT 標(biāo)識(shí)的都會(huì)發(fā)布為RELEASE 版本。
  • SNAPSHOT 版本會(huì)自動(dòng)加一個(gè)時(shí)間作為標(biāo)識(shí),如:1.0.0-SNAPSHOT 發(fā)布后為變成 1.0.0-SNAPSHOT-20180522.123456-1.jar

部署到倉(cāng)庫(kù)

mvn deploy

上傳第三方 JAR 包

Nexus 3.0 不支持頁(yè)面上傳,可使用 maven 命令:

如第三方JAR包:kaptcha-2.3.jar

mvn deploy:deploy-file -DgroupId=com.google.code.kaptcha -DartifactId=kaptcha -Dversion=2.3 -Dpackaging=jar -Dfile=D:\kaptcha-2.3.jar -Durl=http://192.168.1.7:8081/repository/maven-releases/ -DrepositoryId=nexus-releases

注意事項(xiàng):

  • 建議在上傳第三方 JAR 包時(shí),創(chuàng)建單獨(dú)的第三方 JAR 包管理倉(cāng)庫(kù),便于管理有維護(hù)。(maven-3rd)
  • -DrepositoryId=nexus-releases對(duì)應(yīng)的是 settings.xml中 Servers 配置的 ID 名稱。(授權(quán))

配置代理倉(cāng)庫(kù)

<repositories>
    <repository>
        <id>maven-nexus</id>
        <name>Nexus Repository</name>
        <url>http://127.0.0.1:8081/repository/maven-public/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>maven-nexus</id>
        <name>Nexus Plugin Repository</name>
        <url>http://127.0.0.1:8081/repository/maven-public/</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </pluginRepository>
</pluginRepositories>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容