Méthode de dump de classes dans le classpath de l'intérieur de la JVM?
Mon code défaut avec une ClassNotFoundException
.
Je peux voir que le fichier jar contenant la classe est définitivement sur le chemin de la classe à partir de l'invite de commande de l'exécution.
Est-il un moyen de vider la liste des classes dans le classpath de la JVM? (Idéalement, certains de code Java).
(Je ne veux pas voir les classes dans un répertoire, je veux voir une liste de ce qui est chargé dans la JVM).
Les réponses à cette question, de servir une autre question: "Comment puis-je savoir ce que classpath ressources pas réussi à charger au cours de la JVM init?" - la sécurité? fichier non trouvé? etc? comment obtenez-vous une liste de "ceux qui ont fait ça" par rapport à "ceux qui ne l'ont pas fait?"
OriginalL'auteur hawkeye | 2011-09-28
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas vraiment ce que vous voulez voir si vous obtenez un
CNFE
, car il ne l'est pas. En Plus de ne pas tous les cours disponibles seront chargés à un moment donné.Commencez par aller à travers cette liste. Mais en général, si il ne l'est pas, il n'est effectivement pas trouvé.
OriginalL'auteur Dave Newton
Vous pouvez par programmation d'afficher le chemin de classe, en regardant les chargeurs de classes et le dumping de l'Url qu'ils sont en train de charger.
Quelque chose comme ceci:
il serait de produire un résultat similaire à:
OriginalL'auteur prunge
Si vous cherchez seulement pour résoudre une Classe qui n'est Pas Constaté de bug, puis l'ajout d'un code de vidage au sein de l'application peut ajouter de la complexité à l'éteindre plus tard. Il serait peut-être préférable d'utiliser -verbose:classe argument JVM qui serait sortie de toutes les classes chargées au moment de l'exécution. Il est facile de le désactiver et de sortie de la console peut facilement être redirigé vers un journal.
OriginalL'auteur Rajeev Sreedharan
Eh bien, vous pourriez créer un vidage de la mémoire (par exemple, par jmap) et la vue (par exemple, via jhat).
Sinon, IIRC jconsole peut montrer les classes chargées, vous pouvez donc les consulter. Je ne suis pas entièrement sûr, bien que je n'ai pas l'exécution de jconsole droit maintenant.
Une troisième alternative (pour Java 5+) serait VisualVM qui fait partie de la Java6+ de distribution.
Cependant, la plupart certainement votre fichier jar n'est pas sur le chemin de classe, ou vous utilisez des chargeurs de classes personnalisées. Pourriez-vous élaborer sur la façon dont vous mettez que jar dans le classpath?
OriginalL'auteur Thomas