6 votes

Comment savoir quelle classe / package / méthodes sont utilisés par un fichier jar donné?

J'ai un fichier JAR. Je veux savoir quelles classes externes et méthodes sont utilisées par les classes à l'intérieur du fichier JAR. Quelqu'un peut-il me suggérer un outil?

Par exemple - si les deux classes suivantes sont regroupées dans Myjar.jar

import java.util.Vector;
class MyJarClass{

    public static void main(String args[]){
        Vector v = new Vector();
        AnotherClass another = new AnotherClass();

        v.addElement("one");
        another.doSomething();

    }
}

class AnotherClass{

    void doSomething(){
    }
}

Quand je fournis ce JAR à un outil - l'outil devrait montrer que java.util.Vector et Vector.adElements() proviennent d'une source externe (non présente dans MyJar.jar)

J'ai oublié de mentionner que je n'ai pas accès au code source.

5voto

Andreas_D Points 64111

Facile

import com.example.*;

Possible

List = new ArrayList();

Un défi

Class clazz = Class.forName("com.example.MyType");

Mission impossible

List classes = getClassNamesFromUrl("http://example.com/classes.txt");
for (String className:classes) {
   doSomethingWith(Class.forName(className));
}

Je soutiens l'avis de Jon de regarder le code bytecode (BCEL), mais sachez simplement qu'en général, il n'est pas possible de lire toutes les dépendances d'un fichier jar, car elles peuvent être dynamiques et définies en dehors de la bibliothèque (voir : Mission impossible).


Difficile de dire s'il existe un outil, jetez un œil à ces répertoires sur java-source.net :

Pour aller plus loin

3voto

Jon Skeet Points 692016

Vous voudrez peut-être regarder BCEL, qui vous permettra d'analyser les fichiers de classe et de découvrir ce qu'ils utilisent. Je m'attends cependant à ce que cela demande un certain effort.

1voto

Enrico Sasdelli Points 11

Vérifiez untangle

C'est un petit utilitaire en ligne de commande qui recherche les utilisations de classes ou de packages à l'intérieur de jars ou de répertoires contenant des classes.

Avertissement : Je suis l'auteur de untangle

0voto

stacker Points 34209

Vérifiez JDepend

L'interface graphique affiche les couplages afférents et efférents de chaque package Java analysé, présentés dans la structure arborescente familière de Java Swing.

0voto

JavaDepend pourrait vous aider pour de tels besoins, vous pouvez obtenir tous les éléments utilisés pour n'importe quel élément de code, que ce soit un jar, un espace de noms, une classe ou une méthode.

Le CQL, semblable à SQL, vous offre une plus grande flexibilité pour demander des informations sur votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X