Обычно это выполняется с помощью процесса, называемого сканированием классов. В общем случае загрузчики классов не позволяют сканировать все классы в пути к классам.Но обычно единственным используемым загрузчиком класса является UrlClassLoader
, из которого мы можем получить список каталогов и файлов jar (см. getURLs) и открыть их один за другим, чтобы отобразить доступные классы.
Этот подход реализуется библиотеками, такими как Scannotation и Reflections.
Другой подход заключается в использовании Java Pluggable Annotation Processing API для написания обработчика аннотаций, который будет собирать все аннотированные классы во время компиляции и создавать индексный файл для использования во время выполнения.
Вышеупомянутый механизм реализован в библиотеке ClassIndex.
Использование сканирования на основе классов обычно на два порядка медленнее, чем индексирование во время компиляции. См. this benchmark.
Вы используете IDE? – thejh
Вы хотите найти в исходном коде (.java) или в скомпилированном коде (.class)? –
Нет, я не использую IDE. Меня интересует только скомпилированный код в моем JAR. – yegor256