2010-08-09 6 views
2

J'essaie de trouver un moyen de rassembler tous les java.lang.Class chargés à partir de fichiers jar, mais ignorer ceux du code source lui-même.Dumping java.lang.Class est originaire des fichiers jar

J'ai trouvé l'interface de java.lang.instrument.Instrumentation et j'ai pensé qu'il pourrait servir le but, mais il s'est avéré pas tout à fait .... Une des fonctions disponibles "getAllLoadedClasses" vider tout java.lang.Class est sortie (ce qui est bien), mais non seulement les dump ont été chargés depuis le fichier jar et aussi chargés depuis le fichier source.

Existe-t-il une configuration qui nous permet de personnaliser le paramètre afin que seuls les fichiers jar.java.lang.Class proviennent des fichiers jar ou qu'il y ait une meilleure solution dans la nature? Ce que je veux atteindre dans la représentation de code sera quelque chose comme ci-dessous.

java.lang.Class[] 
classesLoadedFromJars = getClassesLoadedFromJars(); 

for (java.lang.Class class : classesLoadedFromJars) { 
    // .............. 
} 

Un mot ou deux sur la suggestion sera utile!

Merci d'avance.

+2

Quel est le problème que vous devez résoudre? –

+2

Que signifie "classes chargées à partir du code source"? – dty

+0

Vous utilisez 'class' comme nom de variable. Êtes-vous sûr que cela compile? – mkadunc

Répondre

1

Le classloader de la classe devrait être capable de vous donner une idée de l'endroit où une certaine classe a été chargée.

ClassLoader loader = myClass.getClassLoader() 
if (loader instanceof URLClassLoader) { 
    URLClassLoader uLoader = (URLClassLoader)loader; 
    URL cURL = uLoader.getResource(myClass.getName().replace('.', '/')+".class"); 
} 

si cURL commence par jar://, la classe proviennent d'un fichier jar

+0

quelle serait la fonction à utiliser? – Daniel

+0

ajouté un exemple de code. Il semble qu'il n'y a pas de meilleure façon de faire cela que d'obtenir le classLoader pour localiser manuellement le fichier .class – mkadunc

Questions connexes