atell 发表于 2013-2-3 10:37:14

判断ClassLoader下的某个类是否有重复[转自梁飞]

import java.net.URL;import java.util.*;public class etst {    public static void checkDuplicate(Class cls) {      checkDuplicate(cls.getName().replace('.', '/') + ".class");    }    public static void checkDuplicateByName(String className) {      System.err.println("checkDuplicate");      checkDuplicate(className.replace('.', '/') + ".class");    }    public static void checkDuplicate(String path) {      try {            // 在ClassPath搜文件            System.err.println("checkDuplicate");            Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(                  path);            Set files = new HashSet();            while (urls.hasMoreElements()) {                URL url = urls.nextElement();                if (url != null) {                  String file = url.getFile();                  if (file != null && file.length() > 0) {                        System.err.println("Duplicate class " + path + " in " + files.size()                              + " jar " + url);                        files.add(file);                  }                }            }            // 如果有多个,就表示重复            if (files.size() > 1) {                System.err.println("Duplicate class " + path + " in " + files.size() + " jar "                        + files);            }      } catch (Throwable e) { // 防御性容错            System.err.println(e.getMessage());      }    }            public static void main(String[] args){      checkDuplicateByName("java.lang.String");    }} 
输出结果:
checkDuplicate
checkDuplicate
Duplicate class java/lang/String.class in 0 jar jar:file:/usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/rt.jar!/java/lang/String.class
页: [1]
查看完整版本: 判断ClassLoader下的某个类是否有重复[转自梁飞]