`
atell
  • 浏览: 161683 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

判断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

分享到:
评论

相关推荐

    ClassLoader运行机制 自己写的

    这意味着当一个ClassLoader尝试加载某个类时,它首先会将任务委托给其父ClassLoader。如果父ClassLoader找不到该类,子ClassLoader才会尝试自己去加载。这个机制保证了系统类(如`java.lang.Object`)只被加载一次,...

    ClassLoader类加载机制和原理详解

    在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中执行。本文将深入探讨ClassLoader的工作原理和类加载机制,帮助开发者理解这个至关重要的概念。 1. 类加载机制概述 Java的类加载...

    Java ClassLoader定制实例

    每个ClassLoader都有其父ClassLoader,它们形成了一个层次结构,子ClassLoader可以委托父ClassLoader去加载类,避免了类的重复加载。 在Java中,类的加载通常遵循“双亲委派模型”。这个模型的工作原理是:当一个...

    JAVA ClassLoader 讲解 (类加载器)

    1. **引导类加载器(Bootstrap ClassLoader)**:这是最基础的类加载器,负责加载Java的核心库类,如`java.lang`包下的类。 2. **扩展类加载器(Extension ClassLoader)**:它负责加载位于`-Djava.ext.dirs`系统...

    自定义classloader的使用

    每个版本的库可以有专属的Classloader,确保它们各自加载各自的类,防止版本冲突。 六、动态加载与卸载 自定义Classloader还可以实现动态加载和卸载类的功能。在某些场景下,比如插件系统,我们需要在运行时加载或...

    ClassLoader 详解.doc

    在类加载过程中,遵循“双亲委派模型”:当一个类加载器需要加载某个类时,它首先会委托它的父加载器尝试加载,只有当父加载器无法加载时,当前加载器才会尝试自己加载。这种机制避免了类的重复加载,并确保了核心...

    classloader

    3. 如果类还未加载,ClassLoader会在指定的路径(例如类路径,classpath)下寻找对应的.class文件。 4. 找到类文件后,ClassLoader读取文件内容并将其转换为字节码。 5. 接下来,字节码会被验证确保符合Java语言规范...

    ClassLoader小例子

    在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中,使得程序能够执行。本示例"ClassLoader小例子"将深入探讨这个概念,并通过一个具体的程序来演示其工作原理。下面我们...

    ClassLoader

    2. **避免重复加载**: 由于每个类加载器都有一个缓存机制,因此在同一个类加载器环境下不会出现多次加载相同类的情况。 #### 五、Java类加载器层次结构 Java类加载器主要包括三种类型: 1. **启动(Bootstrap)类...

    java ClassLoader机制及其在OSGi中的应用

    1. 每个OSGi bundle都有自己的ClassLoader,用于加载该bundle中的类,这使得不同bundle之间的类隔离得以实现,避免了类冲突。 2. OSGi的ClassLoader支持动态加载和卸载bundle,当bundle被激活或停用时,对应的类...

    探究java的ClassLoader及类变量初始化顺序

    在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让...

    ClassLoader类加载器

    了解和掌握ClassLoader的工作原理以及如何自定义ClassLoader对于深入理解Java应用程序的运行机制非常有帮助。以下是对ClassLoader API的使用和自定义的详细说明。 首先,我们来看ClassLoader的基本概念。在Java中,...

    ClassLoader的 一些测试

    2. Extension ClassLoader:扩展类加载器,负责加载JRE的扩展目录(jre/lib/ext目录下的jar文件)。 3. AppClassLoade:应用程序类加载器,也叫系统类加载器,负责加载用户类路径(classpath)上的类。 在Java中,...

    深入理解ClassLoader工作机制.docx

    《深入理解ClassLoader工作机制》 Java虚拟机(JVM)中的ClassLoader是负责加载类到内存中的核心组件。...总的来说,深入理解ClassLoader的内部运作,有助于我们更好地理解和利用Java平台的强大功能。

    JVM ClassLoader简析

    当需要加载一个类时,ClassLoader首先检查该类是否已经加载。如果未加载,它会委托给父ClassLoader加载。这种委托加载机制保证了类的唯一性,防止了同一个类被不同ClassLoader加载两次的问题。 ClassLoader还有...

    classloader体系结构(含hotswap)

    Java的类加载器(ClassLoader)体系结构是JVM(Java虚拟机)中至关重要的一部分,它负责将类的字节码转换为运行时的类实例。本文将深入探讨启动类加载器、扩展类加载器、系统类加载器以及用户自定义类加载器,同时还...

    ClassLoader(类加载机制)1

    在Java中,类加载器主要有三层:Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和App ClassLoader(系统类加载器)。Bootstrap ClassLoader负责加载JDK的核心库,Extension ...

Global site tag (gtag.js) - Google Analytics