IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Lister les classes utilisées par un programme


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet, concepteur
    Inscrit en
    Mai 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet, concepteur

    Informations forums :
    Inscription : Mai 2003
    Messages : 50
    Points : 46
    Points
    46
    Par défaut Lister les classes utilisées par un programme
    Bonjour,

    Dans le cadre d'un projet assez volumineux contenant plusieurs programmes. Je souhaite créer un jar dédié à un des ces programmes.

    Et j'aimerais éviter d'avoir un jar trop gros.

    Ainsi, existe t-il un outil permettant de lister l'ensemble des classes utilisées par un programme?

    Ce qui permettrai d'inclure dans le jar uniquement les classes nécessaires au fonctionnement du programme.

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    On en parle déjà sur ce sujet : http://www.developpez.net/forums/vie....php?p=2261489

    a++

  3. #3
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    J'ai fait un petit programme qui pourra t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    import java.util.Set;
    import java.util.TreeSet;
     
    import com.sun.org.apache.bcel.internal.Repository;
    import com.sun.org.apache.bcel.internal.classfile.Constant;
    import com.sun.org.apache.bcel.internal.classfile.ConstantClass;
    import com.sun.org.apache.bcel.internal.classfile.ConstantPool;
    import com.sun.org.apache.bcel.internal.classfile.JavaClass;
     
    public class HarvesterTest {
        private Set<String> markedClasses;
        private Set<String> dependencies;
     
        HarvesterTest() {
            markedClasses = new TreeSet<String>();
            dependencies = new TreeSet<String>();
        }
     
        public static void main(String[] args) {
            HarvesterTest tester = new HarvesterTest();
            tester.findClassDependencies("javax.swing.JButton",
                                         "javax.swing");
     
            for (String s: tester.dependencies) {
                System.out.println(s);
            }
        }
     
        private void findClassDependencies(String className,
                                           String filter) {
            if (markedClasses.contains(className)) {
                return;
            }
     
            JavaClass clazz = Repository.lookupClass(className);
            if (clazz == null) {
                return;
            }
     
            markedClasses.add(className);
            ConstantPool pool = clazz.getConstantPool();
     
            for (int i = 0; i < pool.getLength(); i++) {
                Constant constant = pool.getConstant(i);
                if (constant != null && constant instanceof ConstantClass) {
                    String dependency = pool.getConstantString(i, constant.getTag());
                    dependency = dependency.replace('/', '.');
     
                    if (dependency.startsWith(filter)) {
                        dependencies.add(dependency);
                        findClassDependencies(dependency, filter);
                    }
                }
            }
        }
    }
    Tu lui donne un nom de classe et un package a ne pas prendre en compte (si tu veux) et il te filera la liste de toutes les classes utilisees par ta classe. Ce n'est pas utilisable en tant que tel mais je planche sur un truc fini.
    Romain Guy
    Android - Mon livre - Mon blog

  4. #4
    Membre du Club
    Homme Profil pro
    Chef de projet, concepteur
    Inscrit en
    Mai 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet, concepteur

    Informations forums :
    Inscription : Mai 2003
    Messages : 50
    Points : 46
    Points
    46
    Par défaut
    Super, merci.

    Ca marche très bien.

    Je l'ai un peu adapter et il me créer mon build.xml automatiquement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser les informations crées par un programme avec IDle
    Par magalii dans le forum Programmation multimédia/Jeux
    Réponses: 1
    Dernier message: 23/04/2015, 02h01
  2. Réponses: 4
    Dernier message: 11/04/2007, 11h24
  3. [Jar] Lister les classes d'un Jar
    Par GLDavid dans le forum Langage
    Réponses: 8
    Dernier message: 13/02/2007, 13h52
  4. Réponses: 4
    Dernier message: 07/07/2006, 15h44
  5. Trouver le nombre de handle utiliser par un programme
    Par chuckboy dans le forum Windows
    Réponses: 1
    Dernier message: 19/12/2005, 23h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo