什么是 Nexus

Nexus 是一个强大的 Maven 仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。2016 年 4 月 6 日 Nexus 3.0 版本发布,相较 2.x 版本有了很大的改变

  • 对低层代码进行了大规模重构,提升性能,增加可扩展性以及改善用户体验。
  • 升级界面,极大的简化了用户界面的操作和管理。
  • 提供新的安装包,让部署更加简单。
  • 增加对 Docker, NeGet, npm, Bower 的支持。
  • 提供新的管理接口,以及增强对自动任务的管理。

部署 Nexus

我们使用 Docker 来安装和运行 Nexus,docker-compose.yml 配置如下:

  1. version: '3.1'
  2. services:
  3.  nexus:
  4.    restart: always
  5.    image: sonatype/nexus3
  6.    container_name: nexus
  7.  ports:
  8.    - 80:8081
  9.  volumes:
  10.    - data:/nexus-data
  11.  volumes:
  12.    data:

验证安装是否成功

注意: 新版本密码在 cat /var/lib/docker/volumes/nexus_data/_data/admin.password

Maven 仓库介绍

代理仓库(Proxy Repository)

  • 第三方仓库

    • maven-central
    • nuget.org-proxy
  • 版本策略(Version Policy)
    • Release: 正式版本
    • Snapshot: 快照版本
    • Mixed: 混合模式
  • 布局策略(Layout Policy)
    • Strict: 严格
    • Permissive: 宽松

宿主仓库(Hosted Repository)

  • 存储本地上传的组件和资源的

    • maven-releases
    • maven-snapshots
    • nuget-hosted
  • 部署策略(Deployment Policy)
    • Allow Redeploy: 允许重新部署
    • Disable Redeploy: 禁止重新部署
    • Read-Only: 只读

仓库组(Repository Group)

通常包含了多个代理仓库和宿主仓库,在项目中只要引入仓库组就可以下载到代理仓库和宿主仓库中的包

  • maven-public
  • nuget-group

在项目中使用 Nexus

配置认证信息

在 Maven settings.xml 中添加 Nexus 认证信息 (servers 节点下)

  1. <server>
  2.  <id>nexus-releases</id>
  3.  <username>admin</username>
  4.  <password>admin123</password>
  5. </server>
  6. <server>
  7. <id>nexus-snapshots</id>
  8. <username>admin</username>
  9. <password>admin123</password>
  10. </server>

Snapshots 与 Releases 的区别

  • nexus-releases: 用于发布 Release 版本
  • nexus-snapshots: 用于发布 Snapshot 版本(快照版)

Release 版本与 Snapshot 定义

  1. Release: 1.0.0/1.0.0-RELEASE
  2. Snapshot: 1.0.0-SNAPSHOT
  • 在项目 pom.xml 中设置的版本号添加 SNAPSHOT 标识的都会发布为 SNAPSHOT 版本,没有 SNAPSHOT 标识的都会发布为 RELEASE 版本。
  • SNAPSHOT 版本会自动加一个时间作为标识,如:1.0.0-SNAPSHOT 发布后为变成 1.0.0-SNAPSHOT-20180522.123456-1.jar

配置自动化部署

在 pom.xml 中添加如下代码

  1. <distributionManagement>
  2.  <repository>
  3.    <id>nexus-releases</id>
  4.    <name>Nexus Release Repository</name>
  5.    <url>http://127.0.0.1:8081/repository/maven-releases/</url>
  6.  </repository>
  7.  <snapshotRepository>
  8.    <id>nexus-snapshots</id>
  9.    <name>Nexus Snapshot Repository</name>
  10.    <url>http://127.0.0.1:8081/repository/maven-snapshots/</url>
  11.  </snapshotRepository>
  12. </distributionManagement>

注意事项

  • ID 名称必须要与 settings.xml 中 Servers 配置的 ID 名称保持一致
  • 项目版本号中有 SNAPSHOT 标识的,会发布到 Nexus Snapshots Repository, 否则发布到 Nexus Release Repository,并根据 ID 去匹配授权账号

部署到仓库

  1. mvn deploy

配置代理仓库

  1. <repositories>
  2.   <repository>
  3.     <id>nexus</id>
  4.     <name>Nexus Repository</name>
  5.     <url>http://127.0.0.1:8081/repository/maven-public/</url>
  6.     <snapshots>
  7.      <enabled>true</enabled>
  8.     </snapshots>
  9.     <releases>
  10.       <enabled>true</enabled>
  11.     </releases>
  12.  </repository>
  13. </repositories>
  14. <pluginRepositories>
  15.   <pluginRepository>
  16.    <id>nexus</id>
  17.    <name>Nexus Plugin Repository</name>
  18.    <url>http://127.0.0.1:8081/repository/maven-public/</url>
  19.    <snapshots>
  20.      <enabled>true</enabled>
  21.    </snapshots>
  22.    <releases>
  23.      <enabled>true</enabled>
  24.    </releases>
  25.   </pluginRepository>
  26. </pluginRepositories>

扩展阅读

手动上传第三方依赖

Nexus 3.1.x 开始支持页面上传第三方依赖功能,以下为手动上传命令

  1. # 如第三方JAR包:aliyun-sdk-oss-2.2.3.jar
  2. mvn deploy:deploy-file
  3. -DgroupId=com.aliyun.oss
  4. -DartifactId=aliyun-sdk-oss
  5. -Dversion=2.2.3
  6. -Dpackaging=jar
  7. -Dfile=D:\aliyun-sdk-oss-2.2.3.jar
  8. -Durl=http://127.0.0.1:8081/repository/maven-3rd/
  9. -DrepositoryId=nexus-releases

注意事项

  • 建议在上传第三方 JAR 包时,创建单独的第三方 JAR 包管理仓库,便于管理有维护。(maven-3rd)
  • -DrepositoryId=nexus-releases 对应的是 settings.xml 中 Servers 配置的 ID 名称。(授权)

4.Docker Compose 部署 Nexus的更多相关文章

  1. 使用Docker Compose 部署Nexus后初次登录账号密码不正确,并且在nexus-data下没有admin,password

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

  2. 使用Docker Compose 部署Nexus后提示:Unable to create directory /nexus-data/instance

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

  3. Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  4. Docker Compose部署Nexus3时的docker-compose,yml代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  5. 使用Docker Compose部署基于Sentinel的高可用Redis集群

    使用Docker Compose部署基于Sentinel的高可用Redis集群 https://yq.aliyun.com/articles/57953 Docker系列之(五):使用Docker C ...

  6. Docker Compose 部署前后端分离应用

    部署前后端分离应用 容器化 Abp 应用 关于 Abp 应用的容器化,其实和普通的 ASP.NET Core 应用差不多,大家可以参考我此前的文章. 唯一需要注意的是:因为 Abp 解决方案中有多个项 ...

  7. Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  8. 在Windows Server 2019通过Docker Compose部署Asp.Net Core

    一.安装Docker Enterprise 安装文档是: https://docs.docker.com/install/windows/docker-ee/ 安装完成后,如下图 二.首先,拉取一个W ...

  9. Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

随机推荐

  1. [Effective Java 读书笔记] 第二章 创建和销毁对象 第三 四条

    第三条 用私有构造器或者枚举类型强化singleton属性 singleton指只能被实例化一次的类,即将构造器设置为私有,使用公有静态成员来实例化,且只实例化一次对象 第四条 通过私有构造器强化不可 ...

  2. php单例模式的实现

    <?php /** * 设计模式之单例模式 * $_instance必须声明为静态的私有变量 * 构造函数和析构函数必须声明为私有,防止外部程序new * 类从而失去单例模式的意义 * getI ...

  3. bash通配符 shell正则表达式

    在linux中 通配符是系统命令使用,一般用来匹配文件名或者什么的用在系统命令中. 通配符是系统级别的,通配符多用在文件名上,比如查找find,ls,cp,rm 正则表达式是操作字符串,以行尾单位来匹 ...

  4. 1 Nginx + 12 Tomcat +2DB 实现2个程序负载均衡

    根据真实生产环境 总结. 硬件:共计5台服务器  1台负载windows.2台业务windows.2台数据库linux 业务:运行两个程序,两个数据库 具体:63服务器安装 Nginx 做负载 :61 ...

  5. CodeForces 429B Working out DP

    E - Working out Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Su ...

  6. SHELL下打包文件

    SHELL下打包文件 在我们拿下webshell的时候,想要获取数据或者源码往往会用菜刀或者蚁剑去打包,但是这个时候往往就会出现很多问题,列如打包失败,或者是打包得不完整等等. 这个时候如果对方是wi ...

  7. JavaScript 箭头函数(Lambda表达式)

    Lambda表达式(箭头函数)用于表示一个函数,所以它和函数一样,也拥有参数.返回值.函数体,但它没有函数名,所以Lambda表达式相当于一个匿名函数. 使用方法: ()=>{} 小括号里放参数 ...

  8. 广西Ukey登录需求

    1.前端控制浏览器用户安装证书[1.检测,2,提示用户强制安装] JITComVCTK_S.exe 2.前端调用接口获取认证原文 3.对前端认证原文处理,提交请求到后端 摘算法处理后的认证原文 认证原 ...

  9. java.net.SocketTimeoutException: Read timed out 异常排查

    问题描述:使用RestTemplate调用接口出现该异常,相关调用代码: ResponseEntity<ResultVO> responseEntity; try { responseEn ...

  10. Nginx三大主要功能

    1.做静态资源服务器,可以用于前端项目发布,图片文件文件等静态服务器. 2.做反向代理服务器,域名往往配置在Nginx上,真正的业务服务器躲在其身后. 3.做负载均衡服务器,作为负载集群的入口网关. ...