2016-05-13 10 views
0

ist die Struktur meiner Java-Projekt:Warum kann ich meine Klasse nicht mit ExtClassLoader laden? Diese

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

Der Inhalt HelloWorld.java:

package com.study.test; 

public class HelloWorld {} 

Der Inhalt 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()); 
    } 

} 

Der Wert der "java.ext.dirs "ist:

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

aber die Ausgabe von:

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

ich die Klassendatei HelloWorld.class im Verzeichnis setzen" System.out.println(HelloWorld.class.getClassLoader()); "ist:

[email protected] 

Warum die Klasse HelloWorld wird nicht von ExtClassLoader geladen? ExtClassLoader ist der Elternklassenlader von AppClassLoader.

+0

Hier ist ein ziemlich guter Artikel, auf dem Classloader tun, was: https://blogs.oracle.com/ sundararajan/entry/environment_java_class_loading –

Antwort

0

Der Erweiterungs-Classloader lädt nur Klassen aus Jar-Dateien.

assume folgende Struktur

src/Test.java 
src/HelloWorld.java 

ändern Test.java als (bearbeiten dies ist nicht wirklich notwendig, nur um zu zeigen, dass die Lösung nicht während der Kompilierung durchgeführt wird)

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()); 
    } 
} 

kompilieren sie

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

erstellen Jar-Datei mit den Klassen

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

überprüfen den Inhalt der Jar-Datei

jar tf test-hello.jar 

Ausgang

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

Umzug der test-hello.jar im Erweiterungsverzeichnis

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

Lauf der Klasse Test

java com.study.test.Test 

Ausgabe ähnlich (die Verzeichnisse, in denen von Ihrem questin kopiert)

D:\glassfish4\jdk7\jre\lib\ext;C:\windows\Sun\Java\lib\ext 
[email protected] 
+0

Es funktioniert. Vielen Dank für Ihre Antwort! – dreamer

Verwandte Themen