如何优雅的获取maven下载失败的依赖目录

Posted 緈諨の約錠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何优雅的获取maven下载失败的依赖目录相关的知识,希望对你有一定的参考价值。

1 前言

项目中很普遍使用maven进行项目的构建,但是使用maven时,由于网络不稳定,或者需要FQ等因素,导致部分jar可能下载失败,只能重新下载才能使项目正常启动。

你有没有下载maven失败的困扰?重新Reload All Maven Project没有效果?实际上,maven在第一次下载依赖时,会创建一个目录,一旦网络不好下载失败,下次不会再次下载了,除非你找到失败的那的目录,删除后,才能重新下载。

如何快速找到那个依赖报错了呢?不多唠叨了,见下文解决方案。

2 获取maven下载失败的依赖目录

直接上代码:

package com.smilehappiness.utils;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 项目中很普遍使用maven进行项目的构建,但是使用maven时,由于网络不稳定,或者需要FQ等因素,导致部分jar可能下载失败,只能重新下载才能使项目正常启动。 如何快速找到那个依赖报错了呢?不多唠叨了,见下文解决方案:
 * 通过读取指定的目录及子目录下指定文件名的路径,获取需要的资源,返回结果为失败的列表List
 * <p/>
 *
 * @author smilehappiness
 * @Date 2021/9/29 19:20
 */
public class MavenFailJarUtil {

    private static Logger logger = LoggerFactory.getLogger(MavenFailJarUtil.class);

    /**
     * <p>
     * 通过制定路径,后缀,以及是否循环遍历子目录来获取目录下的资源文件
     * <p/>
     *
     * @param path   文件路径
     * @param suffix 后缀名,用来判断依赖是否下载失败了, 为空则表示下载失败
     * @param flag   是否遍历子目录
     * @return java.util.List<java.lang.String>
     * @Date 2021/9/29 19:26
     */
    public static List<String> getFilesList(String path, String suffix, boolean flag) {
        List<String> lstFileNames = new ArrayList<>();
        File file = new File(path);
        return MavenFailJarUtil.listFile(lstFileNames, file, suffix, flag);
    }

    /**
     * <p>
     * aether-ed239b5e-5ab7-49c1-8f71-df76605fb76e-spring-beans-5.0.5.RELEASE.jar.sha1-in-progress
     * 以in-progress为结尾的为下载失败的依赖,常见的下载依赖失败的后缀,.sha1-in-progress/.jar-in-progress/.pom-in-progress/.lastUpdated
     * <p/>
     *
     * @param fileNameList 失败的jar列表
     * @param file         文件路径
     * @param suffix       后缀名,用来判断依赖是否下载失败了, 为空则表示下载失败
     * @param flag         是否遍历子目录
     * @return java.util.List<java.lang.String>
     * @Date 2021/9/29 19:30
     */
    private static List<String> listFile(List<String> fileNameList, File file, String suffix, boolean flag) {
        // 若是目录, 采用递归的方法遍历子目录
        if (file.isDirectory()) {
            File[] t = file.listFiles();

            for (int i = 0; i < t.length; i++) {
                if (flag || t[i].isFile()) {
                    listFile(fileNameList, t[i], suffix, flag);
                }
            }
        } else {
            //判断当前文件是不是下载失败的
            String filePath = file.getAbsolutePath();
            if (StringUtils.isBlank(suffix)) {
                //后缀名, 为空则表示遍历所有文件
                fileNameList.add(filePath);
            } else {
                // 最后一个.(即后缀名前面的.)的索引
                int begIndex = filePath.lastIndexOf(".");
                // 这里可以筛选指定后缀的文件
                if (begIndex != -1) {
                    String tempSuffix = filePath.substring(begIndex + 1);
                    // sha1-in-progress包含in-progress
                    // 这里因为指定的后缀与截取.的后缀,名字不一致,所以加一个|| tempsuffix.contains(suffix)条件
                    if (tempSuffix.equals(suffix) || tempSuffix.contains(suffix)) {
                        fileNameList.add(filePath);
                    }
                }
            }
        }

        return fileNameList;
    }

    /**
     * <p>
     * lastUpdated 或者 in-progress
     * <p/>
     *
     * @param args
     * @return void
     * @Date 2021/9/29 19:51
     */
    public static void main(String[] args) {
        // window系统下:"G:\\\\repository" 或者 mac系统下:/Users/smilehappiness/Desktop/MyWorkPlace/repository
        List<String> list = getFilesList("/Users/smilehappiness/Desktop/MyWorkPlace/repository", "lastUpdated", true);
        logger.debug("依赖下载失败的个数:{}", list.size());
        logger.info("依赖下载失败的依赖目录:{}", list);
    }
}

写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,希望尽自己的努力,做到更好,大家一起努力进步!

如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!

给自己的梦想添加一双翅膀,让它可以在天空中自由自在的飞翔!

以上是关于如何优雅的获取maven下载失败的依赖目录的主要内容,如果未能解决你的问题,请参考以下文章

如何优雅的获取maven下载失败的依赖目录

Maven 依赖下载失败的解决办法

IDEA中Maven依赖下载失败解决方案

IDEA 这么设置 Maven,再也不用担心依赖下载失败了

oracle驱动包maven下载失败解决

maven依赖包下载失败解决办法