老项目中class类找不到怎么解决

一些老的项目需要手动添加jar包。有些class报红找不到类,我们可以用这个工具类在特定的目录下查要找的class类,如果哪个jar包中有这个class名,会打印出来这个jar包的决对路径,然后我们把这个jar包手动添加到项目中。这样问题就解决了

java 复制代码
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.io.IOException;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class SearchClassFromJar {
    public static void main(String[] args) throws IOException {
        // 遍历当前目录(D:\zttGithub\repo)及子目录中的所有 JAR 包
        List<File> jarFiles = new ArrayList<>();
        traverseDirectory(new File("D:\\zttGithub\\repo"), jarFiles);
        findClass(jarFiles,"BinaryDecoder");

    }

    /**
     * 查询特定目录下的所有jar包
     * @param directory
     * @param jarFiles
     */
    private static void traverseDirectory(File directory, List<File> jarFiles) {
        if (!directory.exists() || !directory.isDirectory()) {
            return;
        }

        File[] files = directory.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isFile() && file.getName().endsWith(".jar")) {
                    jarFiles.add(file);
                } else if (file.isDirectory()) {
                    traverseDirectory(file, jarFiles);  // 递归遍历子目录
                }
            }
        }
    }

    /**
     * 查询ja包列表中是否有要寻找的findName的class存在
     * @param jarFiles
     * @param findName
     * @throws IOException
     */
    private static void findClass(List<File> jarFiles,String findName) throws IOException {
        for (File jar : jarFiles) {
            try (JarFile jarFile = new JarFile(jar.getAbsolutePath())) {
                Enumeration<JarEntry> entries = jarFile.entries();
                while (entries.hasMoreElements()) {
                    JarEntry entry = entries.nextElement();
                    if (entry.getName().endsWith(".class")) {
                        // 类名格式:com/example/MyClass.class
                        String className = entry.getName().replace("/", ".").replace(".class", "");
                        if(className.contains(findName)){
                            System.out.println("jar包名为:"+jar.getAbsolutePath()+",要找的类名为:"+className);
                        }

                    }
                }
            }
        }
    }
}

结果打印:

java 复制代码
jar包名为:D:\zttGithub\repo\commons-codec\commons-codec\1.11\commons-codec-1.11.jar,要找的类名为:org.apache.commons.codec.BinaryDecoder
jar包名为:D:\zttGithub\repo\commons-codec\commons-codec\1.6\commons-codec-1.6.jar,要找的类名为:org.apache.commons.codec.BinaryDecoder
相关推荐
学计算机的计算基8 分钟前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
tachibana212 分钟前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
万亿少女的梦16831 分钟前
基于Spring Boot、Java与MySQL的网络订餐系统设计与实现
java·spring boot·mysql·系统设计·网络订餐
咩咩啃树皮9 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚9 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白11 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司12 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地13 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415913 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风15 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope