Por lo general, esto se hace mediante el proceso llamado exploración classpath. En general, los cargadores de clases no permiten el escaneo a través de todas las clases en el classpath.Pero generalmente el único cargador de clases utilizado es UrlClassLoader
desde el que podemos recuperar la lista de directorios y archivos jar (consulte getURLs) y abrirlos uno por uno para enumerar las clases disponibles.
Este enfoque es implementado por bibliotecas como Scannotation y Reflections.
Otro enfoque es utilizar Java Pluggable Annotation Processing API para escribir el procesador de anotaciones que recogerá todas las clases anotadas en tiempo de compilación y compilará el archivo de índice para su uso en tiempo de ejecución.
El mecanismo anterior se implementa en la biblioteca ClassIndex.
El uso del análisis de classpath suele ser dos órdenes de magnitud más lento que la indexación en tiempo de compilación. Ver this benchmark.
¿Está utilizando un IDE? – thejh
¿Desea buscar en el código fuente (.java) o en el código compilado (.class)? –
No, no uso ningún IDE. Solo estoy interesado en el código compilado en mi JAR. – yegor256