检查jar冲突,查找存在相同class的jar

embedded/2024/10/8 23:10:20/

写在前面

本文看下如何查找jar冲突,即查找哪些jar包中存在相同的class。如果是存在相同jar的不同版本,基本一眼就能看出来,然后结合maven的依赖关系将其剔除掉即可,但是当你遇到了有人手动拷贝某些class到jar包中导致冲突的情况时,就欲哭无泪了,而我就曾掉入此🕳,灰常痛苦。所以本文就给出一段这样的程序,方便检测。

1:代码

java">package com.dahuyou.asr.demo;import com.sun.org.apache.xpath.internal.objects.XString;import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;public class scan_class {public static void main(String[] args) {String jarDirectoryPath="d:\\test\\lib";File directory = new File(jarDirectoryPath);File[] files = directory.listFiles(((dir, name) -> name.endsWith(".jar")));HashMap<String, String> hashMap = new HashMap<>();for (File jarFile : files){try {System.out.println(jarFile.getName());JarFile jar = new JarFile(jarFile);Enumeration<JarEntry> entries = jar.entries();while (entries.hasMoreElements()) {JarEntry jarEntry = entries.nextElement();String name = jarEntry.getName();if (name.endsWith(".class")) {String className=name.replace("/",".");if(hashMap.containsKey(className)){System.out.println("冲突的类:"+className);System.out.println("存在于:"+hashMap.get(className)+"和:"+jarFile.getName());}else {hashMap.put(className,jarFile.getName());
//                            System.out.println("写入:"+className+"  "+jarFile.getName());}}}} catch (IOException e) {System.err.println("无法读取 JAR 文件: " + jarFile.getName());e.printStackTrace();}}}}

测试jar,运行:
在这里插入图片描述
另,程序readme:

功能:
检测某一路径下所有jar包的冲突类。使用:
此处换成文件路径即可
String jarDirectoryPath="E:\\BaiduSyncdisk\\ZGM\\work\\bigdata_note\\软件安装\\seatunnel-2.3.3\\backend\\apache-seatunnel-2.3.3\\lib";

小程序,大作用!!!

写在后面

有时候,你想到了方案,却觉得麻烦而不去做,反而会导致更大的麻烦,所以,想到了就去做,工作如此,生活也亦应如此!!!

参考文章列表


http://www.ppmy.cn/embedded/124767.html

相关文章

第十一章 缓存之更新/穿透/雪崩/击穿

目录 一、什么是缓存 二、缓存更新策略 2.1. 缓存主动更新策略 2.1.1. Cache Aside模式&#xff08;主流&#xff09;‌ 2.1.2. Read/Write Through模式‌ 2.1‌.3. Write Behind模式‌ 2.1.4. 总结 三、缓存穿透 四、缓存雪崩 五、缓存击穿 5.1. 互斥锁实现 5.1.1…

python爬虫 - 进阶requests模块

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、SSL证书问题 &#xff08;一&#xff09;跳过 SSL 证书验证 &#xff0…

Java基础(上)

Java的特性 简单易学&#xff08;语法简单&#xff0c;上手容易&#xff09;&#xff1b; 面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b; 平台无关性&#xff08; Java 虚拟机实现平台无关性&#xff09;&#xff1b; 支持多线程&…

信息学奥赛使用的编程IDE:Dev-C++ 安装指南

信息学奥赛&#xff08;NOI&#xff09;作为全国性的编程竞赛&#xff0c;要求参赛学生具备扎实的编程能力&#xff0c;而熟练使用适合的编程工具则是学习与竞赛的基础。在众多编程环境中&#xff0c;Dev-C IDE 因其简洁、轻量、支持C编程等特点&#xff0c;成为许多参赛者的常…

场景题1-设计redis的key和value的原则

在设计 Redis 的 key 和 value 时&#xff0c;遵循一些最佳实践和设计原则可以确保系统的性能、可扩展性和易维护性。以下是设计 Redis key 和 value 时的常见原则&#xff1a; 1.RedisKey的设计原则 1.1.简短有意义 1&#xff09;Redis 是内存数据库&#xff0c;key 越短&am…

39.7K Star,LobeChat,解锁高效对话体验

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 导语 在当今人工智能快速发展的时代&#xff0c;智能对话系统的需求…

Apache安装后无法启动的问题“不能再本地计算机启动apache”

首先安装 参考这位博主的小白下载和安装Apache的教程&#xff08;保姆级&#xff09; 遇到的问题 在启动的时候遇到问题 说apache不能在本地计算机启动 解决方法 1. 路径检查 首先&#xff01;&#xff01;&#xff01; 请仔细检查你的httpd.conf文件中的Apache路径是否…

sicp每日一题[2.36-2.37]

果然习惯不能停&#xff0c;就两天没学&#xff0c;昨天就忘的干干净净了。。今天把昨天的补上 Exercise 2.36 The procedure a c c u m u l a t e − n accumulate-n accumulate−n is similar to a c c u m u l a t e accumulate accumulate except that it takes as its t…