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).

Était-ce utile?

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());
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top