Thomas Darimont
Erfahrenes Mitglied
Hallo,
wie sicherlich schon viele Wissen kann man mit:
Die das Quell-Jar der (geladenen) Klasse XXX bekommen. Das funktioniert jedoch nur solange wie die Klasse nicht von dem BootClassloader geladen wurde... (das String.class aus rt.jar stammt kann man über diesen Mechanismus nicht aufdecken, da String.class.getProtectionDomain().getCodeSource() null ist)
Dafür gibts aber im JDK auch eine (hacky) Alternative Which!
(Okay, das ist keine echte Alternative da kein offiziell supportetes API aber egal )
Ausgabe:
Gruß Tom
wie sicherlich schon viele Wissen kann man mit:
Java:
XXX.class.getProtectionDomain().getCodeSource().getLocation().toURI();
Dafür gibts aber im JDK auch eine (hacky) Alternative Which!
(Okay, das ist keine echte Alternative da kein offiziell supportetes API aber egal )
Java:
package de.tutorials.training;
import com.google.gson.Gson;
public class ScriptingHacks {
public static void main(String[] args) throws Exception {
System.out.println(Gson.class.getProtectionDomain().getCodeSource().getLocation().toURI());
System.out.println(com.sun.xml.internal.bind.util.Which.which(Gson.class));
try{
System.out.println(String.class.getProtectionDomain().getCodeSource().getLocation().toURI());
}catch(Throwable t){
System.out.println("String.class.getProtectionDomain().getCodeSource() is " + String.class.getProtectionDomain().getCodeSource());
}
//Which findet sogar die Quellen zu Klassen aus dem Bootclasspath :)
System.out.println(com.sun.xml.internal.bind.util.Which.which(String.class));
}
}
Ausgabe:
Code:
file:/C:/development/java/libs/reflections/lib/gson-1.4.jar
jar:file:/C:/development/java/libs/reflections/lib/gson-1.4.jar!/com/google/gson/Gson.class
String.class.getProtectionDomain().getCodeSource() is null
jar:file:/C:/Program%20Files/Java/jdk1.6.0_22/jre/lib/rt.jar!/java/lang/String.class
Gruß Tom