19、DockerComprose-安裝nexus3

一、 概要

私服是一種特殊的遠(yuǎn)程Maven倉(cāng)庫(kù),它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù),私服一般被配置為互聯(lián)網(wǎng)遠(yuǎn)程倉(cāng)庫(kù)的鏡像,供局域網(wǎng)內(nèi)的Maven用戶(hù)使用。

image

當(dāng)Maven需要下載依賴(lài)的時(shí)候,先向私服請(qǐng)求,如果私服上不存在該依賴(lài),則從外部的遠(yuǎn)程倉(cāng)庫(kù)下載,同時(shí)緩存在私服之上,然后為Maven下載請(qǐng)求提供下載服務(wù),另外,對(duì)于自定義或第三方的jar可以從本地上傳到私服,供局域網(wǎng)內(nèi)其他maven用戶(hù)使用。
image

二、優(yōu)點(diǎn)

  1. 節(jié)省外網(wǎng)寬帶
  2. 加速M(fèi)aven依賴(lài)
  3. 部署第三方構(gòu)件
  4. 提高穩(wěn)定性、增強(qiáng)控制:原因是外網(wǎng)不穩(wěn)定
  5. 降低中央倉(cāng)庫(kù)的負(fù)荷:原因是中央倉(cāng)庫(kù)訪(fǎng)問(wèn)量太大

三、搭建私服

說(shuō)明

Maven私有倉(cāng)庫(kù)-使用docker部署Nexus

官方鏡像說(shuō)明

啟動(dòng)容器

官方說(shuō)明中提到的是使用docker直接啟動(dòng)。我選擇用docker-compose啟動(dòng)。
docker-compose.yml文件如下:

  • vim docker-compose.yml
    services:
      nexus:
        container_name: nexus-container
        image: sonatype/nexus3
        restart: always
        ports:
         - 8081:8081
        volumes:
         #  映射數(shù)據(jù)目錄
         - ./nexus3/data/:/nexus-data
         #  映射日志目錄
         - ./nexus3/log/:/nexus-data/log/
    
  • docker-compose up -d
  • docker-compose ps

注意 : 可能會(huì)出現(xiàn)權(quán)限問(wèn)題

/nexus-data/log/karaf.log (Permission denied)

修改宿主機(jī)映射目錄的權(quán)限 例如:

 # 例如我的容器卷目錄  /docker/docker-compose/nexus/nexus3/data
 chmod -R 777 docker/docker-compose/nexus/nexus3/data

驗(yàn)證安裝是否成功

在瀏覽器輸入 http://127.0.0.1:8081

image

注意 第一次登陸的時(shí)候賬號(hào)名是admin密碼在在宿主機(jī)隱射的data數(shù)據(jù)卷中
image

四、訪(fǎng)問(wèn)nexus3

maven相關(guān)的倉(cāng)庫(kù)

  • maven-central
  • maven-releases
  • maven-snapshots
  • maven-public


    image

類(lèi)型

proxy是遠(yuǎn)程倉(cāng)庫(kù)的代理
在nexus中配置了一個(gè)中央庫(kù)的proxy,當(dāng)用戶(hù)向這個(gè)proxy請(qǐng)求一個(gè)artifact,這個(gè)proxy就會(huì)先在本地查找,如果找不到的話(huà),就會(huì)從遠(yuǎn)程倉(cāng)庫(kù) 下載,然后返回給用戶(hù),相當(dāng)于起到一個(gè)中轉(zhuǎn)的作用。
hosted是宿主倉(cāng)庫(kù)
用戶(hù)可以把自己的一些依賴(lài),deploy到hosted中,也可以手工上傳構(gòu)件到hosted里。比如說(shuō)oracle的驅(qū)動(dòng)程序,ojdbc6.jar,在中央庫(kù)是獲取不到的,就需要手工上傳到hosted里。
group是倉(cāng)庫(kù)組
在maven里沒(méi)有這個(gè)概念,是nexus特有的。目的是將上述多個(gè)倉(cāng)庫(kù)聚合,對(duì)用戶(hù)暴露統(tǒng)一的地址,這樣用戶(hù)就不需要在pom中配置多個(gè)地址,只要統(tǒng)一配置group的地址就可以了。

五、如何發(fā)布自己的構(gòu)件到私有倉(cāng)庫(kù)中?

配置settings文件中的節(jié)點(diǎn)

在~/.m2/settings或者全局config/settings中增加server節(jié)點(diǎn),根據(jù)需要可以添加多個(gè)server

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

在pom文件中配置插件

在項(xiàng)目的pom.xml/build/中配置中配置maven-deploy-plugin

<!--發(fā)布到私有倉(cāng)庫(kù)依賴(lài)的插件-->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-deploy-plugin</artifactId>
  <version>2.8.1</version>
  <executions>
    <execution>
      <id>default-deploy</id>
      <phase>deploy</phase>
      <goals>
        <goal>deploy</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <skip>false</skip>
  </configuration>
</plugin>

溫馨提示:如果在多模塊項(xiàng)目中,可以將不需要發(fā)布的項(xiàng)目配置為skip=true。比如在parent的pom.xml中增加以下內(nèi)容后,所有模塊都會(huì)跳過(guò)發(fā)布。

<build>
  <plugins>
    <!--發(fā)布到私有倉(cāng)庫(kù)依賴(lài)的插件-->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-deploy-plugin</artifactId>
      <configuration>
        <skip>true</skip>
      </configuration>
    </plugin>
  </plugins>
</build>

配置distributionManagement

在項(xiàng)目的pom.xml中配置distributionManagement

<!--發(fā)布到私有倉(cāng)庫(kù)的配置-->
<distributionManagement>
  <repository>
    <id>nexus-releases</id>
    <name>nexus releases</name>
    <url>http://0.0.0.0:8081/repository/maven-releases/</url>
  </repository>
  <snapshotRepository>
    <id>nexus-snapshots</id>
    <name>nexus snapshots</name>
    <url>http://0.0.0.0:8081/repository/maven-snapshots/</url>
    <uniqueVersion>false</uniqueVersion>
    <layout>legacy</layout>
  </snapshotRepository>
</distributionManagement>

其中repository.id指~/.m2/settings.xml中配置的server.id, 這兩個(gè)是同一個(gè)概念,值要一致。

  • 運(yùn)行pom.xml所在目錄 運(yùn)行發(fā)布命令
mvn clean deploy -Dmaven.test.skip=true

六、指定使用私有倉(cāng)庫(kù)下載maven依賴(lài)

有兩種方式,建議使用第二種方式

pom.xml文件中配置

在需要引用構(gòu)件的項(xiàng)目中添加repository配置

<!--在項(xiàng)目中指定使用私有倉(cāng)庫(kù)或者在~/.m2/settings.xml配置全局的mirror-->
<repositories>
  <repository>
    <id>nexus-ielong</id>
    <name>ielong Nexus Repository</name>
    <url>http://0.0.0.0:18081/repository/maven-public/</url>
  </repository>
</repositories>

maven中的settings配置

在~/.m2/settings中指定mirror

    <mirrors>
        <!--不再使用aliyun的鏡像-->
        <!--<mirror>
            <id>nexus-aliyun</id>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            <mirrorOf>central</mirrorOf>
        </mirror>-->
        <!--使用自己的私有鏡像-->
        <mirror>
            <id>nexus-ielong</id>
            <name>nexus public group</name>
            <url>http://0.0.0.0:8081/repository/maven-public/</url>
            <mirrorof>*</mirrorof>
        </mirror>
    </mirrors>
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 首先私服是一種衍生出來(lái)的特殊的Maven遠(yuǎn)程倉(cāng)庫(kù),構(gòu)建私服的好處請(qǐng)看3.5私服 可以幫助大家建立私服的倉(cāng)庫(kù)管理軟件...
    zlcook閱讀 10,834評(píng)論 0 32
  • 在Maven中,任何一個(gè)依賴(lài)、插件或者項(xiàng)目構(gòu)建的輸出,都可以稱(chēng)之為構(gòu)件。 Maven在某個(gè)統(tǒng)一的位置存儲(chǔ)所有項(xiàng)目的...
    三也視界閱讀 2,337評(píng)論 0 4
  • 五. 倉(cāng)庫(kù) 在Maven中,任何一個(gè)依賴(lài)、插件或者項(xiàng)目構(gòu)建的輸出,都可以稱(chēng)之為 構(gòu)件。Maven在某個(gè)統(tǒng)一的位置存...
    wind_sky閱讀 1,578評(píng)論 0 0
  • 什么是Maven Maven是一個(gè)采用純Java編寫(xiě)的開(kāi)源項(xiàng)目管理工具, Maven采用了一種被稱(chēng)之為Projec...
    Java3y閱讀 824評(píng)論 0 16
  • 小時(shí)候,每每到了春天,放學(xué)以后總要約幾個(gè)小伙伴一起去挖野菜,雖然我只認(rèn)識(shí)婆婆丁(蒲公英)······但是這個(gè)樂(lè)趣卻...
    美與美食閱讀 268評(píng)論 2 1

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