docker搭建maven私库Nexus3

2023-12-15 05:35:42

什么是Maven私服?

Maven 私服是一种特殊的Maven远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。

当然也并不是说私服只能建立在局域网,也有很多公司会直接把私服部署到公网,具体还是得看公司业务的性质是否是保密的等等,因为局域网的话只能在公司用,部署到公网的话员工在家里也可以办公使用。

建立了 Maven 私服后,当局域网内的用户需要某个构件时,会按照如下顺序进行请求和下载。

请求本地仓库,若本地仓库不存在所需构件,则跳转到第 2 步;
请求 Maven 私服,将所需构件下载到本地仓库,若私服中不存在所需构件,则跳转到第 3 步。
请求外部的远程仓库,将所需构件下载并缓存到 Maven 私服,若外部远程仓库不存在所需构件,则 Maven 直接报错。
此外,一些无法从外部仓库下载到的构件,也能从本地上传到私服供其他人使用。

Maven 私服优势

Maven 私服具有以下 5 点优势:

  • 节省外网带宽:大量对于外部远程仓库的重复请求,会消耗很大量的带宽,利用 Maven私服代理外部仓库后,能够消除对外部仓库的大量重复请求,降低外网带宽压力。
  • 下载速度更快:Maven 私服位于局域网内,从私服下载构建更快更稳定。
    便于部署第三方构件:有些构件是无法从任何一个远程仓库中获得的(例如,某公司或组织内部的私有构件、Oracle 的 JDBC 驱动等),建立私服之后,就可以将这些构件部署到私服中,供内部 Maven 项目使用。
  • 提高项目的稳定性,增强对项目的控制:如果不建立私服,那么 Maven 项目的构件就高度依赖外部的远程仓库,若外部网络不稳定,则项目的构建过程也会变得不稳定。建立私服后,即使外部网络状况不佳甚至中断,只要私服中已经缓存了所需的构件,Maven 也能够正常运行。
  • 此外还提供了很多额外控制功能,例如,权限管理、RELEASE/SNAPSHOT 版本控制等,可以对仓库进行一些更加高级的控制。
  • 降低中央仓库得负荷压力:由于私服会缓存中央仓库得构件,避免了很多对中央仓库的重复下载,降低了中央仓库的负荷。

环境要求

需要先安装
1.docker
2.jdk

安装Nexus

下载一个nexus3的镜像:

docker pull sonatype/nexus3

使用nexus3镜像创建并启动一个容器,然后指定暴露18091端口到对应主机的18091端口:

docker run -d -p 18091:18091 --name nexus -v /backup/nexus-data:/var/nexus-data --restart=always sonatype/nexus3

查看启动容器的状态

docker ps

在这里插入图片描述

查看容器日志

docker logs -f -t 容器名称id

由于nexus的默认端口为8081,我们在启动的时候改为18091后需要修改nexus的配置文件

先进入容器

docker exec -it 容器名称 bash

修改配置文件

vi /opt/sonatype/nexus/etc/nexus-default.properties 

在这里插入图片描述

同时查看admin密码

vi /nexus-data/admin.password

这样就可以在本地浏览器进入nexus页面了,地址为 服务器ip:18091
在这里插入图片描述

右上角登录用户名为admin,密码为之前查看的密码。

浏览器访问配置仓库

删除nuget开头的仓库
配置maven-central的代理地址
在这里插入图片描述

阿里代理地址:http://maven.aliyun.com/nexus/content/groups/public/

配置本地maven的settings.xml

servers标签修改 仓库权限用户名和密码

	<server>  
        <id>maven-releases</id>  
        <username>admin</username>  
        <password>wubuer@2021</password>  
	</server>
	<server>   
		<id>maven-snapshots</id>   
		<username>admin</username>   
		<password>wubuer@2021</password>   
	</server>

mirrors添加仓库中group类型的仓库

	<mirror>  
       <id>nexus</id>  
       <name>internal nexus repository</name>  
       <url>http://119.3.90.18:18091/repository/maven-public/</url>  
       <mirrorOf>central</mirrorOf>  
   </mirror> 

profiles添加仓库中仓库信息

	<profile>    
    <id>nexus</id>    
     <repositories>    
       <repository>    
         <id>maven-public</id>    
         <url>http://119.3.90.18:18091/repository/maven-public/</url>    
         <releases>
  		<enabled>true</enabled>
  	   </releases>    
         <snapshots>
  		<enabled>true</enabled>
  	   </snapshots>    
       </repository>    
       <repository>    
         <id>maven-snapshots</id>    
         <url>http://119.3.90.18:18091/repository/maven-snapshots/</url>    
         <releases><enabled>true</enabled></releases>    
         <snapshots><enabled>true</enabled></snapshots>    
       </repository>    
     </repositories>    
     <pluginRepositories>    
        <pluginRepository>    
               <id>maven-releases</id>    
                <url>http://119.3.90.18:18091/repository/maven-releases/</url>    
                <releases><enabled>true</enabled></releases>    
                <snapshots><enabled>true</enabled></snapshots>    
              </pluginRepository>    
              <pluginRepository>    
                <id>maven-snapshots</id>    
                 <url>http://119.3.90.18:18091/repository/maven-snapshots/</url>    
               <releases><enabled>true</enabled></releases>    
                <snapshots><enabled>true</enabled></snapshots>    
            </pluginRepository>    
        </pluginRepositories>    
   </profile>

配置pom.xml

添加标签

 <distributionManagement>
      <repository>
          <id>maven-releases</id>
          <name> Nexus Release Repository </name>
          <url> http://119.3.90.18:18091/repository/maven-releases/ </url>
      </repository>
      <snapshotRepository>
          <id>maven-snapshots</id>
          <name> Nexus Snapshot Repository </name>
          <url> http://119.3.90.18:18091/repository/maven-snapshots/ </url>
      </snapshotRepository>
  </distributionManagement>

文章来源:https://blog.csdn.net/qq_42702751/article/details/134919526
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。