首页 > 编程语言 >使用java代码删除nexus maven仓库中的jar包和pom.xml等组件

使用java代码删除nexus maven仓库中的jar包和pom.xml等组件

时间:2024-04-11 11:57:22浏览次数:25  
标签:xml java String nexus component list private 组件 import

pom.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.nihaorz</groupId>
    <artifactId>nexus-component-manager</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <!--指定Java版本-->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.konghq</groupId>
            <artifactId>unirest-java</artifactId>
            <version>3.7.02</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>
    </dependencies>

</project>
复制代码

 

Component.java

复制代码
package com.nihaorz.common;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * Maven组件
 */
@Data
public class Component implements Comparable<Component> {

    private String id;

    private String repository;

    private String group;

    private String name;

    private String version;

    private String format;

    private List<Asset> assets = new ArrayList<>();

    @Override
    public int compareTo(Component o) {
        return this.version.compareTo(o.getVersion());
    }
}
复制代码

 

Asset.java

复制代码
package com.nihaorz.common;

import lombok.Data;

@Data
public class Asset {

    private String id;

    private String repository;

    private String path;

    private String downloadUrl;

    private Checksum checksum;

    private String format;

}
复制代码

 

Checksum.java

复制代码
package com.nihaorz.common;

import lombok.Data;

@Data
public class Checksum {

    private String sha1;

    private String md5;

}
复制代码

 

NexusComponentManager.java 程序入口

复制代码
package com.nihaorz;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.nihaorz.common.Component;
import kong.unirest.HttpResponse;
import kong.unirest.Unirest;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * nexus组件管理,目前主要用来实现SNAPSHOT组件自动删除,在 Nexus Repository Manager OSS 3.9.0-01 版本测试通过
 */
public class NexusComponentManager {

    /**
     * nexus访问地址
     */
    private static final String NEXUS_URL = "http://192.168.100.154:8081";

    /**
     * nexus账号
     */
    private static final String NEXUS_USERNAME = "admin";

    /**
     * nexus密码
     */
    private static final String NEXUS_PASSWORD = "admin123";

    /**
     * 成功删除的组件数量
     */
    private static int successDeleteTotal;

    /**
     * 根据仓库名称、groupId和artifactId搜索组件并删除,保留最后一个版本
     *
     * @param args
     */
    public static void main(String[] args) {
        long start1 = System.currentTimeMillis();
        List<Component> list = search("geostack-snapshots", "geostack", "arcgis-service");
        if (list.size() > 1) {
            Collections.sort(list);
            list.remove(list.size() - 1);
            System.out.println(String.format("本次合计将删除%d个组件", list.size()));
            for (int i = 0; i < list.size(); i++) {
                Component component = list.get(i);
                long start2 = System.currentTimeMillis();
                delete(component);
                long end2 = System.currentTimeMillis();
                System.out.println(String.format("[%d/%d] 删除%s仓库中的组件【%s-%s-%s】耗时%d毫秒", i + 1, list.size(), component.getRepository(), component.getGroup(), component.getName(), component.getVersion(), end2 - start2));
            }
            long end1 = System.currentTimeMillis();
            System.out.println(String.format("成功删除%d个组件,总计耗时:%d毫秒", successDeleteTotal, end1 - start1));
        } else {
            System.out.println(String.format("本次查询匹配的组件数量为%d个,不做删除", list.size()));
        }
    }

    /**
     * 删除组件
     *
     * @param component 组件对象
     */
    public static void delete(Component component) {
        String url = String.format("%s/service/rest/beta/components/%s", NEXUS_URL, component.getId());
        HttpResponse response = Unirest.delete(url).basicAuth(NEXUS_USERNAME, NEXUS_PASSWORD).asEmpty();
        int status = response.getStatus();
        if (status == 204) {
            successDeleteTotal++;
        } else {
            System.out.println(String.format("组件【%s-%s-%s】删除失败,http响应代码:%d", component.getRepository(), component.getGroup(), component.getName(), component.getVersion(), status));
        }
    }

    /**
     * 搜索组件
     *
     * @param repository 仓库名称
     * @param groupId    maven中的groupId
     * @param artifactId maven中的artifactId
     * @return
     */
    public static List<Component> search(String repository, String groupId, String artifactId) {
        final List<Component> list = new ArrayList<>();
        search(repository, groupId, artifactId, list, null);
        return list;
    }

    /**
     * 搜索组件
     * <p>
     * 搜索组件时API会对匹配结果进行分页,所以这里采用递归搜索
     *
     * @param repository 仓库名称
     * @param groupId    maven中的groupId
     * @param artifactId maven中的artifactId
     * @param list       存放查询结果的集合
     * @param token      token,由上一页查询结果中获取,第一次查询传null
     */
    private static void search(String repository, String groupId, String artifactId, List<Component> list, String token) {
        String url = String.format("%s/service/rest/beta/search?repository=%s&maven.groupId=%s&maven.artifactId=%s", NEXUS_URL, repository, groupId, artifactId);
        if (token != null) {
            url += "&continuationToken=" + token;
        }
        HttpResponse<String> response = Unirest.get(url).basicAuth(NEXUS_USERNAME, NEXUS_PASSWORD).asString();
        if (response.getStatus() == 200) {
            JsonObject jsonObject = JsonParser.parseString(response.getBody()).getAsJsonObject();
            List<Component> temp = new Gson().fromJson(jsonObject.getAsJsonArray("items"), new TypeToken<List<Component>>() {
            }.getType());
            list.addAll(temp);
            if (!jsonObject.get("continuationToken").isJsonNull()) {
                token = jsonObject.get("continuationToken").getAsString();
                search(repository, groupId, artifactId, list, token);
            }
        } else {
            System.out.println(String.format("组件搜索出错,http响应代码:%d,错误信息:%s", response.getStatus(), response.getStatusText()));
        }
    }

}
复制代码

 

标签:xml,java,String,nexus,component,list,private,组件,import
From: https://www.cnblogs.com/lvjinlin/p/18128728

相关文章

  • 数据结构之图(java语言版)
    图是比树更复杂的结构,树是一对多的关系,图是多对多的关系。一、基本概念1、定义:图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的;其中,点通常被成为"顶点(vertex)",而点与点之间的连线则被成为"边或弧"(edege)。通常记为,G=(V,E)。2、根据边是否有方向,将图可以划分......
  • 数据结构之Hash(java语言版)
    Hash表Hash也叫散列、哈希,是一种根据key-value对进行存储的数据结构。每个value对应一个key,这样查找的时候就无需遍历。Hash表使用数组作为底层结构,数组中每个区域都存储着Hash,这就是Hash表。列表、数组、树这些数据结构在查询数据时的时间复杂度通常为O(n),而Hash的时间复杂......
  • 数据结构之二叉搜索树(java语言版)
    之前介绍了树,主要实现了二叉树的代码。在二叉树的基础上有许多衍生的树,如二叉搜索树、哈夫曼树等,今天学习一下二叉搜索树。二叉搜索树二叉搜索树是二叉树的一种,是应用非常广泛的一种二叉树,英文简称为BST又被称为:二叉查找树、二叉排序树特点任意一个节点的值都大于其左子树所......
  • 链表(java语言版)
    链表(Linkedlist)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。使用链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域......
  • 深入浅出 妙用Javascript中apply、call、bind
    这篇文章实在是很难下笔,因为网上相关文章不胜枚举。巧合的是前些天看到阮老师的一篇文章的一句话:“对我来说,博客首先是一种知识管理工具,其次才是传播工具。我的技术文章,主要用来整理我还不懂的知识。我只写那些我还没有完全掌握的东西,那些我精通的东西,往往没有动力写。炫耀从来......
  • java代码将16进制字符串转换为图片,jdbc入库blob字段,解决ORA-01704,PLS-00172,ORA-06550,
    从Oracle导出SQL文件中的insert语句包含blob字段,语句HEXTORAW函数将16进制的字符串入库,由于字符串太长,insert失败下面的代码读取完整的insert语句,将HEXTORAW函数连同16进制的字符串替换为NULL,先将字段置空插入记录,然后使用PreparedStatement对图片文件读流更新入库importorg.......
  • java 使用Redis的INCR命令或Lua脚本来实现分布式应用生成唯一性ID
    在Java中使用Redis的INCR命令或Lua脚本来生成分布式应用中的唯一性ID是一个常见的做法。以下是如何实现这两种方法的简要说明。1、使用Redis的INCR命令Redis的INCR命令是一个用于递增存储在键中的整数值的原子操作。如果键不存在,那么它将被初始化为0再进行递增操作。命令格式I......
  • Java中将字符串转换成数字的方法
    转换为整数(int)你可以使用Integer.parseInt()方法或Integer.valueOf()方法将字符串转换为int类型。javaStringstr="123";intnumber=Integer.parseInt(str);//使用parseInt//或者intnumberValue=Integer.valueOf(str);//使用valueOfSystem.out.println(number);//......
  • java UTC时间格式化
    importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.TimeZone;/***@author王睿*@date2019-01-2414:32*/publicclassTimeFormat{publicstaticvoidmain(String[]args)throwsParseExcept......
  • JAVA System.getProperty() 与 System.getenv() 差异及示例
    System.getenv() 方法是获取指定的环境变量的值。System.getenv() 接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否则返回null。System.getProperty() 是获取系统的相关属性,包括文件编码、操作系统名称、区域、用户名等,此属性一般由jvm自动获取,不能设置。Sys......