106 votes

Comment lire toutes les classes d'un paquetage Java dans le classpath ?

J'ai besoin de lire les classes contenues dans un paquetage Java. Ces classes sont dans le classpath. Je dois effectuer cette tâche directement à partir d'un programme Java. Connaissez-vous un moyen simple de le faire ?

List<Class> classes = readClassesFrom("my.package")

0voto

brianegge Points 12857

À l'époque où les applets étaient monnaie courante, on pouvait avoir une URL dans le classpath. Lorsque le chargeur de classe avait besoin d'une classe, il recherchait tous les emplacements du classpath, y compris les ressources http. Parce que vous pouvez avoir des choses comme des URLs et des répertoires sur le classpath, il n'y a pas de moyen facile d'obtenir une liste définitive des classes.

Cependant, vous pouvez vous en approcher. Certaines des bibliothèques de Spring le font maintenant. Vous pouvez récupérer tous les jar's sur le classpath, et les ouvrir comme des fichiers. Vous pouvez ensuite prendre cette liste de fichiers, et créer une structure de données contenant vos classes.

0voto

Stephan Points 10596

Le projet ldapbeans fournit une classe Scanner qui font cela.

0voto

user3469034 Points 1

Utiliser la dépendance maven :

groupId: net.sf.extcos
artifactId: extcos
version: 0.4b

puis utilisez ce code :

ComponentScanner scanner = new ComponentScanner();
        Set classes = scanner.getClasses(new ComponentQuery() {
            @Override
            protected void query() {
                select().from("com.leyton").returning(allExtending(DynamicForm.class));
            }
        });

-2voto

idarwin Points 320

Brent - la raison pour laquelle l'association est à sens unique est liée au fait que n'importe quelle classe de n'importe quel composant de votre CLASSPATH peut se déclarer dans n'importe quel paquetage (sauf pour java/javax). Il n'y a donc pas de correspondance entre TOUTES les classes d'un "paquet" donné, car personne ne sait ni ne peut savoir. Vous pourriez mettre à jour un fichier jar demain et supprimer ou ajouter des classes. C'est comme essayer d'obtenir une liste de toutes les personnes qui s'appellent John/Jon/Johan dans tous les pays du monde - aucun d'entre nous n'est omniscient et donc aucun d'entre nous n'aura jamais la bonne réponse.

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