批量将本地的maven仓库导入到nexus3中

2023-11-21 17:40

本文主要是介绍批量将本地的maven仓库导入到nexus3中,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前提
浏览器登录nexus管理界面–>设置图标–>Repository–>Repositories–>maven-releases–>Hosted–>请选择‘Allow redeploy’策略,(默认是disable策略,然后保存。 请注意,不同版本的nexus,进入的路径可能有细微区别)

image

  • 依赖
     <dependency>
         <groupId>com.squareup.okhttp3</groupId>
         <artifactId>okhttp</artifactId>
         <version>3.8.1</version>
     </dependency>
     

  • 代码(需要在代码中修改nexus3的请求url和base64加密的字符串)

     

    package com.test;

    import okhttp3.*;

    import java.io.File;
    import java.io.IOException;
    import java.util.*;

    public class LocalRepositoryImport {

        /**
         * 本地仓库路径
         */
        private static String basePath = "D:\\soft\\apache-maven-3.6.2\\repo\\";

        /**
         * SNAPSHOT版本
         *
         */
        private static String check = "SNAPSHOT";

        /**
         * 忽略jar文件
         */
        private static String[] ignorePath = {};

        private static List<String> jarFiles = new ArrayList<>();

        /**
         * http://192.168.8.103:30022/ web访问地址
         */
        private static String RELEASES_URL = "http://192.168.8.103:30022/service/rest/v1/components?repository=maven-releases";

        private static String SNAPSHOTS_URL = "http://192.168.8.103:30022/service/rest/v1/components?repository=maven-snapshots";

        /**
         * http请求处理器.
         */
        private static final OkHttpClient CLIENT = new OkHttpClient().newBuilder().build();


        public static void main(String[] args) throws IOException {
            loadJarFilePath(basePath);
            uploadJarFile();
        }

        /**
         * 查找jar文件
         *
         * @param basePath
         */
        private static void loadJarFilePath(String basePath) {
            File tmp = new File(basePath);
            if (!tmp.exists()) {
                return;
            }
            File[] files = tmp.listFiles();
            for (File file : files) {
                if (file.getName().endsWith(".jar")) {
                    //加入到待上传jar文件列表
                    jarFiles.add(file.getAbsolutePath());
                }
                if (file.isDirectory()) {
                    //深搜遍历
                    loadJarFilePath(file.getAbsolutePath());
                }
            }
        }

        /**
         * 上传文件
         *
         * @throws IOException
         */
        private static void uploadJarFile() throws IOException {
            if (jarFiles.size() > 0) {
                for (String jarFile : jarFiles) {
                    String url = jarFile.contains(check) ? SNAPSHOTS_URL : RELEASES_URL;

                    String spitPath = jarFile.substring(basePath.length());
                    Map<String, String> textMap = getTextMap(spitPath);
                    RequestBody formBody = getFormBody(jarFile, textMap.get("fileName"),
                            textMap.get("groupId"), textMap.get("artifactId"), textMap.get("version"));

                    Request request = new Request.Builder()
                            .url(url)
                            .method("POST", formBody)
                            //YWRtaW4lM0FhZG1pbjEyMw== BASE64加密-->格式 用户名:密码
                            .addHeader("Authorization", "Basic YWRtaW4lM0FhZG1pbjEyMw==")
                            .build();
                    Response response = CLIENT.newCall(request).execute();
                    String s = response.body().string();
                    if (s != null && !s.equals("")) {
                        System.out.println("错误信息:" + s + "\n失败jar文件: " + jarFile);
                    }
                }
            }
        }


        private static Map<String, String> getTextMap(String filePath) {
            Map<String, String> ret = new HashMap<>();
            String[] split = filePath.split("\\\\");
            ret.put("fileName", split[split.length - 1]);
            ret.put("version", split[split.length - 2]);
            ret.put("artifactId", split[split.length - 3]);
            StringJoiner groupId = new StringJoiner(".");
            for (int i = 0; i < split.length - 3; i++) {
                groupId.add(split[i]);
            }
            ret.put("groupId", groupId.toString());
            return ret;
        }


        private static RequestBody getFormBody(String jarFilePath, String fileName, String groupId, String artifactId, String version) {
            MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
            RequestBody jarFileBody = RequestBody.create(MediaType.parse("application/octet-stream"), new File(jarFilePath));
            builder.addFormDataPart("maven2.asset1", fileName, jarFileBody);
            builder.addFormDataPart("maven2.groupId", groupId);
            builder.addFormDataPart("maven2.artifactId", artifactId);
            builder.addFormDataPart("maven2.version", version);
            builder.addFormDataPart("maven2.asset1.extension", "jar");
            return builder.build();
        }

    }


    原文转载自:https://www.cnblogs.com/anlalala/p/15608073.html

 

这篇关于批量将本地的maven仓库导入到nexus3中的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/403972

相关文章

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶