[maven] 使用 Nexus 管理 repository

news2024/11/17 21:40:39

[maven] 使用 Nexus 管理 repository

大概是说还有一篇笔记,两篇内容,maven 的内容就差不多过完了。这一篇笔记主要记一下 maven 的 central 管理部分,之前提到过我们公司用的就是 nexux 做了一个镜像,这里也会用 docker 去创建一个本地的 nexus

三合一的话内容就拆得太长了……所以这里 nexus 的内容单独拆出来,剩下的就剩下 plugins & properties 了

简介

首先简单的过一下管理的流程,本地的项目通过 maven install build deploy 等指令和公司的 repo 进行沟通,公司的 repo 再和 central repo(maven 提供的)或是其他的 cloud 进行沟通。

这个系列主要是讲 maven,所以主要的目标就是 Central Repo,实际操作上,我们公司的前段项目也是部署在 nexus 上,这块就对应了其他的 cloud

maven install build deploy
Organization Repository
Central Repository
Cloud

公司自己内部 host 一个 repo 有几个好处:

  • cached 依赖

  • 控制依赖

    比如说不允许下载未被验证的版本,或者是过于老旧有很多安全隐患的依赖也可以从公司的 repo 删除

  • 上传/管理公司内部的项目

    比如说内部的 util 之类的

使用 docker 运行 nexus

docker 是一个本身的话可以简化一些执行和运行的过程的同时,能够在跨平台的同时还取得相同结果的平台,它主要是用的是 image 和 container 去进行处理,这里不会过多赘述。

说起来我还得吧 docker 和 k8s 的课上完……叹气……

docker 安装

官网上有安装起,点点点就好了:https://www.docker.com/

安装后可以使用下面这个指令查看 docker 是否安装成功了:

docker --version
Docker version 20.10.17, build 100c701

当然,如果 docker 不是作为一个服务器启动的话,得先开启 docker 才行:

在这里插入图片描述

运行 nexus

nexus 的网址在这里:https://hub.docker.com/r/sonatype/nexus3/

直接执行下面指令就可以了:

docker run -d -p 8081:8081 --name nexus sonatype/nexus3
Unable to find image 'sonatype/nexus3:latest' locally
57168402cb72: Pull complete
6caa094755dc: Pull complete
94656dc36e5f: Pull complete
252d91e5c44e: Pull complete
0100fe0780d1: Pull complete
12a0cb9b1e42: Pull complete
cd872a505f36: Pull complete
Digest: sha256:a361830ede036ac2f4942464b1c9ca535cbfcba14c5d3237b0d378fcfee1f3ec
Status: Downloaded newer image for sonatype/nexus3:latest
7555a03ff1bbe5f9e482e1f1dc99311e386da8b669130446303c4fe06d3f05db
    demo ❯

这个指令大致意思是说:docker 需要在 detached 模式下运行,即该容器在后台运行,不占据终端,同时它需要完成 port mapping——docker 默认容器内的 port 不会对外公布,进行一个 8081[外]:8081[内] 的 mapping,这样在容器外使用 localhost:8081 也可以访问。

运行成功可以看到 nexus 已经运行成功了:

docker images
REPOSITORY        TAG       IMAGE ID       CREATED      SIZE
sonatype/nexus3   latest    0b14bd3acc13   9 days ago   552MB

admin 登陆

刚开始还没完全加载好的页面是这样的:

在这里插入图片描述

完了就会提示需要登录,并且提供了密码路径:

在这里插入图片描述

使用以下指令查看密码,登陆,修改密码即可:

docker container exec nexus cat /nexus-data/admin.password

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

repo 类型

在这里插入图片描述

nexus 中主要有这么几种类型:

  • proxy
  • group
  • hosted

其提供的优点有:

  • 提供中心化管理

    对于开发来说,项目中所有地址可以指向 proxy 地址,而不用填写多个 central repo 的地址

  • 缓存

    所有下载的 repo 都会被缓存到 nexus 中,这样相对而言就比较稳定,也可以减少访问 central repo 的流量

  • 权限管理

    比如说我们访问 nexus 就必须要求使用 vpn 访问内网才能用

  • 分组权限管理

    控制那些 repo/artifact 可以被哪些组群的人访问

同样,这些组合的话也可以提供更强的安全性,如公司内部 deploy 的 repo 只有公司内部的人可以使用

新建 maven group

这个在 nexus 的 UI 上操作即可,首先需要以管理员权限登录,随后到设置里面选择新建 repository:

在这里插入图片描述

可以看到可供选择的选项有很多:

在这里插入图片描述

这里选择 maven2(group) 即可

基础内容不用管太多,需要填写的事名字和 repo 的 group:

在这里插入图片描述

在这里插入图片描述

这代表着歌 group 负责中心管理(链接 central repo),snapshots 和 release 的管理

setting xml

这个文件是放在 .m2 根目录下的,大致内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">

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

  <mirrors>
    <mirror>
      <id>central</id>
      <name>central</name>
      <url>http://localhost:8081/repository/maven-group/</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>

</settings>

这会让所有的访问全都重定向到 http://localhost:8081/repository/maven-group/,这个 url 地址是之前创建的 maven-group 的网址:

在这里插入图片描述

mirror 是一个镜像地址,不设置的话就是 settings.xml 里的默认值

不过这些配置也可以在 nexus 里搞,这样项目只需要稳定的从 nexus 里进行数据交互即可

新建 maven 项目并进行配置

这里快捷键创建了一个 maven 项目,初始 pom 如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.ga.maven</groupId>
	<artifactId>repodemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</project>

当然,这些不是重点,重点的是下面的配置:

	<repositories>
		<repository>
			<id>maven-group</id>
			<url>http://localhost:8081/repository/maven-group/</url>
		</repository>
	</repositories>

	<distributionManagement>
		<snapshotRepository>
			<id>nexus-snapshots</id>
			<url>http://localhost:8081/repository/maven-snapshots/</url>
		</snapshotRepository>
		<repository>
			<id>nexus-releases</id>
			<url>http://localhost:8081/repository/maven-releases/</url>
		</repository>
	</distributionManagement>

dependencies 里面定义要到哪个 central repo 里面去下载项目,鉴于 nexus 提供了 proxy,所以这里只需要提供 nexus 的网址即可

<distributionManagement> 定义了 deploy 的 snapshot&release 放到哪里去,这里的 id 最好是与 settings.xml 中一致,我之前少打了一个 s,最终导致 deply 失败。

install & deploy

我把 .m2 下面的 repo 删了,这样下载看得比较清楚些

install

install 的时候可以看到,所有的依赖都是从 localhost 下载的:

ls ~/.m2/repository
❯ mvn install
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.ga.maven:repodemo >------------------------
[INFO] Building repodemo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from central: http://localhost:8081/repository/maven-group/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Downloaded from central: http://localhost:8081/repository/maven-group/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom (8.1 kB at 19 kB/s)
Downloading from central: http://localhost:8081/repository/maven-group/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom
Downloaded from central: http://localhost:8081/repository/maven-group/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom (9.2 kB at 121 kB/s)
Downloading from central: http://localhost:8081/repository/maven-group/org/apache/maven/maven-parent/22/maven-parent-22.pom
Downloaded from central: http://localhost:8081/repository/maven-group/org/apache/maven/maven-parent/22/maven-parent-22.pom (30 kB at 327 kB/s)
Downloading from central: http://localhost:8081/repository/maven-group/org/apache/apache/11/apache-11.pom
Downloaded from central: http://localhost:8081/repository/maven-group/org/apache/apache/11/apache-11.pom (15 kB at 218 kB/s)
Downloading from central: http://localhost:8081/repository/maven-group/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.jar
Downloaded from central: http://localhost:8081/repository/maven-group/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.jar (30 kB at 469 kB/s)
Downloading from central: http://localhost:8081/repository/maven-group/org/apache/maven/plugins/maven-compiler-plugin/3.1/maven-compiler-plugin-3.1.pom
Downloaded from central: http://localhost:8081/repository/maven-group/org/apache/maven/plugins/maven-compiler-plugin/3.1/maven-compiler-plugin-3.1.pom (10 kB at 129 kB/s)

deploy

这里主要就最后几行,deploy 到 localhost 比较重要些

❯ mvn clean install deploy
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.ga.maven:repodemo >------------------------
[INFO] Building repodemo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ repodemo ---
[INFO] Deleting /Users/louhan/study/maven/repodemo/target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ repodemo ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ repodemo ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ repodemo ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ repodemo ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ repodemo ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ repodemo ---
[INFO] Building jar: /Users/louhan/study/maven/repodemo/target/repodemo-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ repodemo ---
[INFO] Installing /Users/louhan/study/maven/repodemo/target/repodemo-0.0.1-SNAPSHOT.jar to /Users/louhan/.m2/repository/com/ga/maven/repodemo/0.0.1-SNAPSHOT/repodemo-0.0.1-SNAPSHOT.jar
[INFO] Installing /Users/louhan/study/maven/repodemo/pom.xml to /Users/louhan/.m2/repository/com/ga/maven/repodemo/0.0.1-SNAPSHOT/repodemo-0.0.1-SNAPSHOT.pom
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ repodemo ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ repodemo ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ repodemo ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ repodemo ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ repodemo ---
[INFO] Skipping execution of surefire because it has already been run for this configuration
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ repodemo ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ repodemo ---
[INFO] Installing /Users/louhan/study/maven/repodemo/target/repodemo-0.0.1-SNAPSHOT.jar to /Users/louhan/.m2/repository/com/ga/maven/repodemo/0.0.1-SNAPSHOT/repodemo-0.0.1-SNAPSHOT.jar
[INFO] Installing /Users/louhan/study/maven/repodemo/pom.xml to /Users/louhan/.m2/repository/com/ga/maven/repodemo/0.0.1-SNAPSHOT/repodemo-0.0.1-SNAPSHOT.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ repodemo ---
Downloading from nexus-snapshots: http://localhost:8081/repository/maven-snapshots/com/ga/maven/repodemo/0.0.1-SNAPSHOT/maven-metadata.xml
Uploading to nexus-snapshots: http://localhost:8081/repository/maven-snapshots/com/ga/maven/repodemo/0.0.1-SNAPSHOT/repodemo-0.0.1-20230918.015512-1.jar
Uploaded to nexus-snapshots: http://localhost:8081/repository/maven-snapshots/com/ga/maven/repodemo/0.0.1-SNAPSHOT/repodemo-0.0.1-20230918.015512-1.jar (1.5 kB at 11 kB/s)
Uploading to nexus-snapshots: http://localhost:8081/repository/maven-snapshots/com/ga/maven/repodemo/0.0.1-SNAPSHOT/repodemo-0.0.1-20230918.015512-1.pom
Uploaded to nexus-snapshots: http://localhost:8081/repository/maven-snapshots/com/ga/maven/repodemo/0.0.1-SNAPSHOT/repodemo-0.0.1-20230918.015512-1.pom (818 B at 10 kB/s)
Downloading from nexus-snapshots: http://localhost:8081/repository/maven-snapshots/com/ga/maven/repodemo/maven-metadata.xml
Uploading to nexus-snapshots: http://localhost:8081/repository/maven-snapshots/com/ga/maven/repodemo/0.0.1-SNAPSHOT/maven-metadata.xml
Uploaded to nexus-snapshots: http://localhost:8081/repository/maven-snapshots/com/ga/maven/repodemo/0.0.1-SNAPSHOT/maven-metadata.xml (770 B at 7.9 kB/s)
Uploading to nexus-snapshots: http://localhost:8081/repository/maven-snapshots/com/ga/maven/repodemo/maven-metadata.xml
Uploaded to nexus-snapshots: http://localhost:8081/repository/maven-snapshots/com/ga/maven/repodemo/maven-metadata.xml (280 B at 5.7 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.693 s
[INFO] Finished at: 2023-09-17T21:55:12-04:00
[INFO] ------------------------------------------------------------------------

当然,图示更明显一些:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1032741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣刷题-数组-滑动窗口法相关题目总结

209. 长度最小的子数组&#xff08;最小滑窗&#xff09; 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0。 示例&#xff1a; 输入&…

uniapp确认提示框;uniapp判断输入框值是否符合正常手机号,身份证号

确认提示框 UniApp 中&#xff0c;你可以使用 uni.showModal 方法来创建确认提示框。以下是一个示例&#xff1a; <template><view class"container"><button click"showAuthModal">显示确认提示框</button></view> </…

react实现动态递增展示数字特效

在可视化展示界面时有一种场景&#xff0c;就是页面在初始化的时候&#xff0c;有些数字展示想要从某个值开始动态递增到实际值&#xff0c;形成一种动画效果。例如&#xff1a; 写一个数字递增的组件&#xff0c;代码如下&#xff1a; import {useEffect, useRef, useState} f…

软考网络工程师IPSEC VPN配置考点总结

IPSEC VPN&#xff08;华为&#xff09;工作流程 配置安全ACL&#xff1a;配置哪些流量需要被保护配置安全提议&#xff1a;配置IPsec的参数配置IKE&#xff1a;预共享密钥&#xff0c;配置身份验证方法、加密算法等安全参数配置安全策略&#xff1a;1和2做关联在接口应用安全…

文件系统之程序是怎么打开文件进行操作的

本篇文章自顶向下&#xff0c;从文件系统的上层出发讲到磁盘&#xff0c;帮助理解程序是如何打开文件并进行后序的读写操作的&#xff0c;读到后面&#xff0c;前面的一些疑惑就得到解决 介绍相关概念 注意&#xff0c;目录也是文件 文件描述符 每个进程都有一个指针*files…

Postman接口测试完整篇,全网唯一

前言 今天给大家分享的内容是接口测试必备的postman测试工具的使用&#xff1a;postman发送get与post请求&#xff0c;变量的设置与引用&#xff0c;文件的导入与导出&#xff0c;断言机制&#xff0c;参数化&#xff08;数据驱动&#xff09;&#xff0c;批量执行测试集&…

算法通关村 | 透彻理解动态规划

1. 斐波那契数列 1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;..... f(n) f(n-1) f(n-2) 代码实现 public static int count_2 0;public int fibonacci(int n){if (n < 2){count_2;return n;}int f1 1;int f2 2;i…

探索单链表数据结构:理解与实现

文章目录 &#x1f34b;引言&#x1f34b;什么是单链表&#xff1f;&#x1f34b;单链表的基本操作&#x1f34b;单链表的实现&#x1f34b;练习题&#x1f34b;总结 &#x1f34b;引言 在计算机科学和数据结构中&#xff0c;链表是一种基本且重要的数据结构&#xff0c;用于存…

基于springboot财务管理系统springboot006

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

【zabbix监控三】zabbix之部署代理服务器

一、部署代理服务器 分布式监控的作用 分担server的几种式压力解决多机房之间的网络延时问题 1、搭建proxy主机 192.168.88.50 关闭防火墙和安全机制&#xff0c;修改主机名 设置 zabbix 的下载源&#xff0c;按照 zabbix-proxy rpm -ivh \ https://mirrors.aliyun.com/zab…

01-Maven入门

1 Maven简介 1.1 Maven是什么 Maven 是一个用于构建和管理 Java 项目的工具。它提供了一种标准化的项目结构和构建流程&#xff0c;可以自动化地处理项目的依赖管理、编译、测试、打包和部署等任务。 Maven 使用一个基于 XML 的配置文件&#xff08;pom.xml&#xff09;来描…

【C++面向对象侯捷】12.虚函数与多态 | 13.委托相关设计【设计模式 经典做法,类与类之间关联起来,太妙了,不断的想,不断的写代码】

文章目录 12.虚函数与多态举例&#xff1a;委托 继承【观察者模式】13.委托相关设计Composite 组合模式Prototype 原型模式 12.虚函数与多态 纯虚函数 一定要 子类重新定义的 继承和复合 关系下的构造和析构 举例&#xff1a;委托 继承【观察者模式】 13.委托相关设计 问题…

建材行业微信小程序开发实战经验分享

随着互联网的迅猛发展&#xff0c;电子商务成为了人们日常购物的主要方式之一。而微信小程序的兴起更是为商家提供了一个全新的线上销售渠道。在建筑材料选购领域&#xff0c;开发一个微信小程序商城平台能够有效地提升用户的购物体验和商家的销售效益。 为了实现建筑材料选购平…

Android studio中如何下载sdk

打开 file -> settings 这个页面, 在要下载的 SDK 前面勾上, 然后点 apply 在 platforms 中就可以看到下载好的 SDK: Android SDK目录结构详细介绍可以参考这篇文章: 51CTO博客- Android SDK目录结构

OpenAI ChatGPT API 文档之 Embedding

译者注&#xff1a; Embedding 直接翻译为嵌入似乎不太恰当&#xff0c;于是问了一下 ChatGPT&#xff0c;它的回复如下&#xff1a; 在自然语言处理和机器学习领域&#xff0c;"embeddings" 是指将单词、短语或文本转换成连续向量空间的过程。这个向量空间通常被称…

Python程序设计实例 |爬取网络中的小说

网络文学是新世纪我国流行文化中的重要领域&#xff0c;年轻人对网络小说更是有着广泛的喜爱。本文以抓取网络小说正文为例编写一个简单、实用的爬虫脚本。 01、分析网页 很多人在阅读网络小说时都喜欢本地阅读&#xff0c;换句话说就是把小说下载到手机或者其他移动设备上阅读…

TQ210-Bootloader-Uboot(LTS)

Bootloader的作用 Bootloader是位于计算机系统启动过程中的程序&#xff0c;它的主要作用是将操作系统从磁盘等外部存储介质加载到计算机内存中&#xff0c;并启动操作系统执行。Bootloader通常包括硬件初始化、自检、异常处理和启动操作系统等功能。它是计算机系统中非常重要…

Mac电脑系统怎么样才能干干净净地卸载应用程序?

Mac系统怎么样才能干干净净地卸载应用程序&#xff0c;不留下隐私数据和用户信息呢&#xff1f;如果有方法的话&#xff0c;那么该方法对于Mac电脑小白是否友好呢&#xff1f; CleanMyMac就是一款用于清理Mac系统下应用程序的一款清理工具&#xff0c;其内置了应用程序的安全卸…

第二证券:智能网联汽车产业迎催化 容量电价政策出台可期

昨日&#xff0c;A股延续调整态势&#xff0c;沪指失守3100点&#xff0c;深成指跌破10000点大关&#xff0c;创业板跌约1%再创阶段新低&#xff1b;两市成交额保持在地量水平&#xff0c;再创年内新低。到收盘&#xff0c;沪指跌0.77%报3084.7点&#xff0c;深成指跌0.9%报998…

速卖通新品如何推广,速卖通的推广渠道有哪些?——站斧浏览器

速卖通的推广渠道非常多样化&#xff0c;卖家可以根据自己的需求和预算选择合适的渠道来推广产品&#xff0c;提高曝光度和销售量&#xff0c;能够有效地提高产品的知名度和信任度。 速卖通新品如何推广&#xff1f; 速卖通上有数以百万计的卖家&#xff0c;每天都有大量的新…