[英]Why am I getting a can't load class, when the class is in my JAR file?
[英]Why can't I load my class by ExtClassLoader?
這是我的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的父類加載器。
擴展類加載器僅從Jar文件中加載類。
采取以下結構
src/Test.java
src/HelloWorld.java
將Test.java
修改為(實際上並不需要編輯 ,只是為了表明在編譯期間未完成解析)
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.