六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 36|回复: 0

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

[复制链接]

升级  92%

52

主题

52

主题

52

主题

秀才

Rank: 2

积分
188
 楼主| 发表于 2013-2-3 10:37:14 | 显示全部楼层 |阅读模式
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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表