Comment obtenir une liste des dépendances de classe Java pour une classe principale?
-
03-07-2019 - |
Question
Existe-t-il un moyen de trouver toutes les dépendances de classe d’une classe principale java?
J'ai examiné manuellement les importations de la classe principale et de ses importations, mais je me suis rendu compte que, puisqu'il n'était pas nécessaire d'importer des classes qui se trouvaient dans le même package, je dressais une liste incomplète.
J'ai besoin de quelque chose qui trouve des dépendances de manière récursive (peut-être à une profondeur définie).
La solution
Cela peut être fait simplement avec javac. Supprimez vos fichiers de classe, puis compilez la classe principale. javac compilera de manière récursive toutes les classes dont il a besoin (à condition de ne pas masquer les classes / interfaces privées du paquet dans des fichiers étrangement nommés). Bien sûr, cela ne couvre pas les hacks récursifs.
Autres conseils
Je viens de trouver Analyzer Dependency Analyzer , télécharger, installer configure et 10 minutes plus tard, j'ai un aperçu complet liste de dépendance de classe.
in idée intellij , vous avez le joli matrice de structure de dépendance . vous pouvez explorer parfaitement les dépendances de paquets et de classes. si vous aimez les choses plus simples, vous avez également un visualiseur de dépendances, mais vous ne pouvez voir que les dépendances de premier ordre.
Vous pouvez jeter un oeil à l'outil de ligne de commande jdeps
:
https://docs.oracle.com /javase/8/docs/technotes/tools/unix/jdeps.html
jdeps -cp <your cp> -v <path to your .class file>
La commande renverra une liste des dépendances pour ce fichier de classe java. Il existe de nombreuses autres options que vous pouvez utiliser dans votre commande, telles que -regex
pour rechercher des dépendances correspondant à un modèle donné
Voici un extrait de code que vous pouvez insérer dans votre méthode principale en Java pour générer des chemins d'accès vers toutes les dépendances de votre application:
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader) cl).getURLs();
for(URL url: urls){
System.out.println(url.getPath());
}