2010-04-13 3 views
3

Comment allez-vous établir où une classe (ou peut-être une ressource) a été chargée? J'essaye de déterminer exactement d'où une classe a été chargée à partir deD'où vient cette classe?

Est-ce que quelqu'un sait si vous pouvez trouver ce qui suit:

  1. De quel fichier Jar est-ce que la classe vient?
  2. Quel classloader a chargé le fichier?

Répondre

5

La classe Class présente une méthode d'instance getClassLoader() qui renvoie une référence au chargeur de classes qui charge la classe qu'il représente. Notez que cela peut renvoyer null. Voir here.

Donc, si vous voulez savoir qui classloader chargé String (comme un exemple), vous pouvez faire:

ClassLoader loader = String.class.getClassLoader(); 

ou:

ClassLoader loader = "I'm a String".getClass().getClassLoader(); 
+1

Qui serait probablement 'null'. En outre, les chargeurs de classes chargent souvent des classes et des ressources à partir de plusieurs emplacements. –

2

Vous pouvez obtenir une URL en appelant MyClass.class.getResource ("MyClass.class") par exemple.

2

Pour une solution de classe un est MyClass.class.getProtectionDomain().getCodeSource().getLocation(). (En fait, peut avoir un nullProtectionDomain ou qui ne peut pas Hava un CodeSource. Mon jeter aussi un SecurityException.

0

Je voudrais aller à ce sujet avec l'option de ligne de commande -verbose:class, enregistrement de la sortie vers un fichier texte et ensuite utiliser grep (ou le DOS trouver si vous êtes windows) pour voir les détails sur le chargement de cette classe

0

si vous avez une instance de la classe insta.getClass(). getClassLoader(). getName() -> ceci est le chargeur de classe qui a chargé la classe

insta.getClass(). getProtectionDomain(). getCodeSource(). getLocation () - où la classe était loader de