Java如何在项目依赖的jar包中查找冲突的类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40110871/article/details/83829421

经常在项目中遇到冲突的jar文件。

使用这个方法可以在本地或者服务器上面查找冲突的类。支持模糊查找。

方便实用的工具,留存备用。

package com.whaty.util;
 
 
import java.util.*;
import java.io.*;
 
 
public class JarClassFind {
	public static int count = 0;
 
 
	static public void main(String[] args) {
		/*
		 * if (args.length < 2) { showHowToUsage(); return; }
		 */
		String className = "XMLParser"; // 要查询的class,模糊类名,凡是类名包括XMLParser的都会查询出来
		//String className="com/lowagie/text/xml/simpleparser/SimpleXMLParser";//指定具体包的类名,当多个类冲突时可以指定包排除
		String libPath = "F:\\STS\\jngl_mysql\\WebRoot"; // 所要查找的JAR包的目录,如果是linux目录记得将下面的\\换成/
 
 
		String absoluteclassname = className.replace('.', '/') + ".class";
 
 
		System.out.println("Find class [" + className + "] in Path [" + libPath + "] Results:");
		FindClassInLocalSystem(libPath, absoluteclassname);
		if (JarClassFind.count == 0) {
			System.out.println("Error:Can't Find Such Jar File!");
		}
		System.out.println("Find Process Ended! Total Results:" + JarClassFind.count);
	}
 
 
	private static void FindClassInLocalSystem(String path, String classname) {
		if (path.charAt(path.length() - 1) != '\\') {
			path += '\\';//linux下面换成/
		}
		File file = new File(path);
		if (!file.exists()) {
			System.out.println("Error: Path not Existed! Please Check it out!");
			return;
		}
		String[] filelist = file.list();
		for (int i = 0; i < filelist.length; i++) {
			File temp = new File(path + filelist[i]);
			if ((temp.isDirectory() && !temp.isHidden() && temp.exists())) {
				FindClassInLocalSystem(path + filelist[i], classname);
			} else {
				if (filelist[i].endsWith("jar")) {
					try {
						java.util.jar.JarFile jarfile = new java.util.jar.JarFile(path + filelist[i]);
						for (Enumeration e = jarfile.entries(); e.hasMoreElements();) {
							String name = e.nextElement().toString();
							if (name.equals(classname) || name.indexOf(classname) > -1) {
								System.out.println("No." + ++JarClassFind.count);
								System.out.println("Jar Package:" + path + filelist[i]);
								System.out.println(name);
							}
						}
					} catch (Exception eee) {
					}
				}
			}
		}
	}
 
 
	public static void showHowToUsage() {
		System.out.println("Usage: Java -cp. JarClassFind <source path> <source class name>");
		System.out.println("Usage: Java -classpath. JarClassFind <source path> <source class name>");
		System.out.println("");
		System.out.println("<source path>:\t\tPath to Find eg:F:\\Jbuilder");
		System.out.println("<source class name>:\tClass to Find eg:java.applet.Applet");
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40110871/article/details/83829421
今日推荐