nexus3 maven迁移仓库迁移

这篇具有很好参考价值的文章主要介绍了nexus3 maven迁移仓库迁移。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

迁移背景:

从nexus 3.33 升级到 nexus 3.64 过程中,私服 maven 的 snapshot 和 hosted 无法上传。由于这个 snapshot 和 hosted 和 npm-proxy 放的同一个 blob存储,无法单独拆除去,所以采用迁移的方式

迁移思路:

down下来 snapshot 和 hosted 仓库,然后 批量上传,下方的代码演示的 release 更改相关的仓库地址即可迁移 snapshot

技术栈:

python 正则

maven配置:

此处配置的 server 和 mirror 分别是上传的凭证和上传的仓库,此处我配置了 snapshot 和 release 两个的!文章来源地址https://www.toymoban.com/news/detail-800800.html

...
    <server>
      <id>xinyunkeji-snapshot</id>
      <username>test-user</username>
      <password>test-pass</password>
    </server>
    <server>
      <id>xinyunkeji-release</id>
      <username>test-user</username>
      <password>test-pass</password>
    </server>
...
<mirror>
    <id>xinyunkeji-snapshot</id>
    <mirrorOf>*</mirrorOf>
    <name>xinyunkeji-snapshot</name>
    <url>https://mirrors.xinyunkeji.com/repository/maven-test-snapshot2</url>
</mirror>
<mirror>
    <id>xinyunkeji-release</id>
    <mirrorOf>*</mirrorOf>
    <name>xinyunkeji-snapshot</name>
    <url>https://mirrors.xinyunkeji.com/repository/maven-test-release-test</url>
</mirror>
...

down仓库的python文件:

import os
import re
import requests
from urllib.parse import unquote

def decode_urls(url_list):
    decoded_urls = [unquote(url) for url in url_list]
    return decoded_urls

def download_url(url, save_dir):
    response = requests.get(url)

    # 检查响应状态码
    if response.status_code == 200:
        # 获取URL的基本路径
        base_url = '/'.join(url.split('/')[:-1])

        # 解析HTML内容
        html_content = response.text

        # 搜索所有链接
        links = find_links(html_content)
        # 遍历链接
        for link in links:
            file_url = base_url +"/"+ link


            # 检查链接是否为目录
            if link.endswith('/'):

                # 创建本地目录
                save_subdir = os.path.join(save_dir, link)
                os.makedirs(save_subdir, exist_ok=True)

                # 递归下载子目录
                download_url(file_url, save_subdir)
            else:
                # 下载文件
                save_file = link.split("/")[-1]
                download_file(link, save_dir+save_file)
    else:
        print(f"Failed to download URL: {url}")


def find_links(html_content):
    # 使用正则表达式或HTML解析库解析HTML内容,提取所有链接
    # 例如,可以使用正则表达式 r'<a\s+href=[\'"](.*?)[\'"]\s*>' 来提取链接
    # 返回一个包含所有链接的列表
    # 使用正则表达式匹配链接
    pattern = r'<a\s+href=[\'"](.*?)[\'"]\s*>'
    matches = re.findall(pattern, html_content)
    matches = decode_urls(matches)
    if '../' in matches:
        matches.remove('../')
    print(matches)

    # 返回匹配到的链接列表
    return matches


def download_file(url, save_path):
    response = requests.get(url, stream=True)

    # 检查响应状态码
    if response.status_code == 200:
        with open(save_path, 'wb') as f:
            for chunk in response.iter_content(chunk_size=8192):
                f.write(chunk)
    else:
        print(f"Failed to download file: {url}")


# 指定下载URL和保存目录(这里是从那个不能上传损坏的仓库下载)
url = "https://mirrors.xinyunkeji.com/service/rest/repository/browse/maven-test-release/"
save_dir = '/opt/maven-hosted/download'

# 创建保存目录(如果不存在)
os.makedirs(save_dir, exist_ok=True)

# 开始下载
download_url(url, save_dir)

批量上传到maven仓库

import os,subprocess

def find_jar_pom_files(directory):
    # 遍历目录及其子目录下的所有文件和目录
    for root, dirs, files in os.walk(directory):
        # 对于每个文件名,检查它是否以 .jar 结尾
        for filename in files:
            if filename.endswith('.jar'):
                # 构造 POM 文件名,并获取其完整路径
                pom_filename = filename[:-4] + '.pom'
                pom_filepath = os.path.join(root, pom_filename)
                # 如果 POM 文件存在,则输出目录路径、JAR 文件名和 POM 文件名
                if os.path.exists(pom_filepath):
                    print(f"Directory: {root}")
                    print(f"JAR file: {filename}")
                    print(f"POM file: {pom_filename}")
                    jar_filename=root + "/" + filename
                    pom_filename=root + "/" + pom_filename
                    #此处file是jar包,pomfile是pom文件,url是maven中配置需要上传到的仓库,后面的id是maven配置server的凭证id,此处使用jar和pom上传,也可用一系列id信息上传,只不过批量上传的话,还得获取相关id的信息,参考如下
                    #mvn deploy:deploy-file -DgroupId=com.aaa -DartifactId=bbb -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar -Dfile=bbb-0.0.1-SNAPSHOT.jar -Durl=http://192.168.1.189:8081/repository/maven-snapshots/ -DrepositoryId=nexus-snapshot
                    command = "mvn deploy:deploy-file -Dfile={} -DpomFile={} -Durl=https://mirrors.xinyunkeji.com/repository/maven-test-release-test/ -DrepositoryId=xinyunkeji-release".format(jar_filename, pom_filename)
                    print(command)
                    print("\n")
                    # 使用 subprocess.run() 函数执行命令,并捕获输出结果
                    result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)



# 设置要遍历的目录路径
directory = '/opt/maven-hosted/download'
# 调用函数,查找所有包含 JAR 和 POM 文件的目录
find_jar_pom_files(directory)

到了这里,关于nexus3 maven迁移仓库迁移的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker安装Nexus3搭建docker私有仓库,并上传镜像

    参考:https://blog.csdn.net/gengkui9897/article/details/127353727 Nexus是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven、npm、Docker、YUM、Helm等格式数据的存储和发布;并且能够与Jekins、SonaQube和Eclipse等工具进行集成。 通过nexus自建能够有效减少访问获取镜像的时间和对带宽使

    2024年02月16日
    浏览(39)
  • nexus搭建maven私有仓库

    Nexus 在企业开发中还是比较常用的私有仓库管理工具,一般把公司内部的Maven jar 包或npm包上传到仓库中,有效的对包文件进行管理。 Nexus 至少需要 2G 以上的内存 安装nexus之前首先安装配置好 JDK 环境 和 Maven环境 1、Linux环境安装openJDK 2、Centos7.3安装maven并配置加速镜像源 ne

    2024年02月12日
    浏览(31)
  • Nexus仓库介绍以及maven deploy配置

    首先介绍一下Nexus的四个仓库的结构: maven-central 代理仓库,代理了maven的中央仓库:https://repo1.maven.org/maven2/; maven-public 仓库组,另外三个仓库都归属于这个组,所以我们的maven配置文件只需配置这个仓库的地址,就可以使用另外三个仓库的组件; maven-releases 稳定版本仓库,

    2024年02月10日
    浏览(30)
  • 【仓库管理】搭建 Maven 私服之一--Nexus仓库(Repository)管理软件

    Nexus 读音:/ˈneksəs/是 Sonatype 公司发布的一款仓库(Repository)管理软件,常用来搭建 Maven 私服,所以也有人将 Nexus 称为“Maven仓库管理器”。 Maven 私服其实并不是 Maven 的核心概念,它仅仅是一种衍生出来的特殊的仓库,但这并不代表它不重要,相反由于私服具有降低中央仓

    2024年01月17日
    浏览(42)
  • Maven进阶2 -- 私服(Nexus)、私服仓库分类、资源上传和下载

    目录 私服是一台独立的服务器,用于解决团队内部的资源共享与资源同步问题。 Nexus 是sonatype公司的一款maven私服产品。 下载地址 启动 访问 登录   本地仓库上传和访问资源需要进行 配置 。 ①创建两个仓库demo-snapshot和demo-release   ②配置访问私服的权限 ③配置私服访问路

    2024年02月13日
    浏览(32)
  • 手动上传本地jar、aar到maven私有仓库nexus

    在此做个笔记

    2024年02月10日
    浏览(35)
  • Maven私有仓库搭建与使用【nexus的配置与使用】【Windows】

    在公司开发测试过程中,内网团队使用一个服务来节省外网宽带以及缓存Maven Respository中没有的jar包 允许上传和下载私有库,并且不被外部访问,安全稳定 官网下载地址,但是速度很慢,可以使用以下链接获取:添加链接描述 解压好下载的nexus压缩包,会有以下两个文件:

    2023年04月08日
    浏览(45)
  • 私有仓库工具Nexus Maven如何部署并实现远程访问管理界面

    Nexus是一个仓库管理工具,用于管理和组织软件构建过程中的依赖项和构件。它与Maven密切相关,可以作为Maven仓库的服务器。Nexus提供了一个集中式的位置,用于存储和共享构件,使团队成员能够方便地访问和部署这些构件。 Cpolar内网穿透是一种安全的内网穿透云服务,可以

    2024年01月18日
    浏览(37)
  • Nexus3中搭建Docker私服

    仓库类型 hosted 本地存储,像官方仓库一样提供本地私库功能 proxy 提供代理其他仓库的类型 group 组类型,可以组合多个仓库为一个地址提供服务 1.1. 安装Nexus3 1.2. 创建用户 创建docker管理的用户:如:docker/docker 1.3. 创建Blob Stores 创建一个名称为docker的BlobStores 1.4. 创建Docker仓库

    2024年01月17日
    浏览(32)
  • Nexus3 重置 admin 账号密码

    nexus3 的 admin 账号密码忘记了,需要重置。 参考: https://support.sonatype.com/hc/en-us/articles/213467158-How-to-reset-a-forgotten-admin-password-in-Nexus-3-x 由于 nexus 是基于 docker 部署,后面我们需要进入容器中执行相关命令,所以此处不能直接使用 docker stop xxx 来关闭服务。需要进入到容器内部

    2024年02月08日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包