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 :

Obtenir la liste des classes d'un jar [Résolu]


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 61
    Par défaut Obtenir la liste des classes d'un jar [Résolu]
    Bonjour à tous,

    Il y a beaucoup de méthodes sur le web pour faire cela mais je n'ai réussi avec aucune pour le moment.
    Je veux une liste de class<?> d'un fichier Jar afin d'utiliser les fonctions qu'il y a dedans par la suite.

    Un début de code :

    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
     
    	File file = new File("MyDir/");
    		FilenameFilter fnf = new FilenameFilter() {
    			public boolean accept(File dir, String name) {
    		        return name.toLowerCase().endsWith(".jar");
    		    }
    		};
    		File[] jarfiles = file.listFiles(fnf);
    		URL[] urls = new URL[10];
    		int i = 0;
    		for (File f : jarfiles)
    		{
    			urls[i] = f.toURI().toURL();
    			i++;
    		}		
    		ClassLoader loader = new URLClassLoader(urls);
    Je ne sais pas si ça commence bien comme ça, je suis totalement paumé dans les JarEntry et les URLCLassLoader...

    Merci d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Les urls classloader vont te permettre d'instancier les classes, mais pas de scanner ce qui s'y trouve. Pour scanner ce qui s'y trouve, il n'y a pas d'autres possibilité, à ma connaissance, que de charger les jar comme des zipfile et de récupérer l'ensemble des noms de fichiers présents dans le zip pour lister les .class.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 61
    Par défaut
    Mais récupérer les noms des classes me permettent pas d'appeler les méthodes si ?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ben une fois que t'as les noms de classes, tu peux utiliser le classloader pour le reste

  5. #5
    Membre averti
    Inscrit en
    Juillet 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 61
    Par défaut
    D'accord je crois que j'ai compris !

    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
    		File f = new File("Dir");
    		FilenameFilter fnf = new FilenameFilter() {
    			public boolean accept(File dir, String name) {
    		        return name.toLowerCase().endsWith(".jar");
    		    }
    		};
    		File[] jf = f.listFiles(fnf);
    		URL[] urls = new URL[5];
    		Class<?>[] cls = new Class<?>[10];
    		JarEntry[] je = new JarEntry[10];
    		ClassLoader loader = new ClassLoader() {
    		};
    		int i = 0;
    		for (File f : jf)
    		{
    			urls[i] = f.toURI().toURL();
    			je[i] = new JarEntry(urls[i].toString());
    			cls[i] = loader.loadClass(je[i].getName());
    			System.out.println(cls[i].getName() + cls[i].getMethods());
    			i++;
    		}		
    	}
    Tout me semblait logique mais j'obtiens un :
    java.lang.ClassNotFoundException:
    sur la ligne mc[i] = loader...
    A part ça, ça paraît logique non ? Ou pas du tout

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    C'est du grand meltingpot ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		ClassLoader loader = new ClassLoader() {
    		};
    Ce classloader ne sera capable de rien charger, puisqu'il ne contient rien.

    Tu dois instancer un URLClassloader auquel tu passe l'ensemble de test jars, pour pouvoir charger le contenu de ces jars

    Ensuite, tu n'a aucun code dans ce que tu présente qui explore le contenu des jar. Pour chaque File trouvé (.jar), tu dois instancier un Zipfile pour explorer son contenu (ZipEntry) et si le nom fini en .class, tu retire ce .class, tu remplace les / par des . et tu as le nom d'une classe que tu peux charger.

Discussions similaires

  1. Obtenir le listing des tables d'une BDD
    Par zoubidaman dans le forum Outils
    Réponses: 1
    Dernier message: 10/11/2004, 00h17
  2. Obtenir la liste des feuilles d'un fichier Excel
    Par Jean Bonnisme dans le forum Access
    Réponses: 3
    Dernier message: 15/10/2004, 10h53
  3. Obtenir la liste des valeurs possibles d'un type
    Par pascalT dans le forum Langage
    Réponses: 5
    Dernier message: 05/10/2004, 15h46
  4. Obtenir la liste des tables
    Par edamiral dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 23/04/2004, 13h33
  5. Comment obtenir la liste des paramètres d'une SP ?
    Par Le Gritche dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/03/2003, 16h54

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