【问题标题】:Why can't I load my class by ExtClassLoader?为什么我不能通过 ExtClassLoader 加载我的课程?
【发布时间】:2016-05-13 15:13:26
【问题描述】:

这是我的 Java 项目的结构:

package: com.study.test
              ---- HelloWorld.java
              ---- Test.java

HelloWorld.java的内容:

package com.study.test;

public class HelloWorld {}

Test.java的内容:

package com.study.test;

public class Test {

    public static void main(String[] args) {
        System.out.println(System.getProperty("java.ext.dirs"));
        System.out.println(HelloWorld.class.getClassLoader());
    }

}

java.ext.dirs”的值为:

D:\glassfish4\jdk7\jre\lib\ext;C:\windows\Sun\Java\lib\ext

我把类文件HelloWorld.class放在目录下:

D:\glassfish4\jdk7\jre\lib\ext\com\study\test

但是“System.out.println(HelloWorld.class.getClassLoader());”的输出是:

sun.misc.Launcher$AppClassLoader@70a0afab

为什么 ExtClassLoader 没有加载 HelloWorld 类? ExtClassLoader 是 AppClassLoader 的父类加载器。

【问题讨论】:

标签: java classloader


【解决方案1】:

扩展类加载器仅从 Jar 文件中加载类。

假设以下结构

src/Test.java
src/HelloWorld.java

Test.java修改为(edit这并不是真正需要的,只是为了表明在编译期间没有完成解析)

package com.study.test;
public class Test {
    public static void main(String[] args) throws Exception {
        System.out.println(System.getProperty("java.ext.dirs"));
        System.out.println(Class.forName("com.study.test.HelloWorld")
            .getClassLoader());
    }
}

编译它们

mkdir bin/
javac -d bin/ src/Test.java src/HelloWorld.java

创建一个包含类的 Jar 文件

jar cf test-hello.jar -C bin/ .

验证Jar文件的内容

jar tf test-hello.jar

输出

META-INF/                       
META-INF/MANIFEST.MF            
com/                            
com/study/                      
com/study/test/                 
com/study/test/HelloWorld.class 
com/study/test/Test.class       

test-hello.jar移动到扩展目录中

mv test-hello.jar D:\glassfish4\jdk7\jre\lib\ext

运行你的课程Test

java com.study.test.Test

输出相似(从您的任务中复制的目录)

D:\glassfish4\jdk7\jre\lib\ext;C:\windows\Sun\Java\lib\ext
sun.misc.Launcher$ExtClassLoader@70dea4e

【讨论】:

    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多