Сканер пакетов Java - найти все классы с заданным интерфейсом - PullRequest
5 голосов
/ 06 апреля 2010

В C # вы можете легко читать все классы из данной сборки.

Я ищу эквивалентную функцию в Java. Мне нужно это для автоматического связывания EJB-компонентов с моим модулем Guice.

Ответы [ 3 ]

4 голосов
/ 06 апреля 2010

К сожалению, в Java нет готового решения.

В нашем проекте мы использовали слегка измененный подход, предложенный некоторый блог . Описанное решение заключается в сканировании файловой системы и JAR-файлов для классов.

Если вы хотите выбрать только классы, реализующие некоторый интерфейс, вы можете выполнить дополнительную проверку, например clazz.isAssignableFrom(MyInterface.class).

2 голосов
/ 06 апреля 2010

Java-эквивалент сборки - это файл JAR; содержимое файла JAR может быть перечислено с использованием классов в java.util.jar.

Нет более общего механизма (например, получение всех классов в пакете), поскольку механизм загрузки классов Java очень гибок и допускает такие вещи, как классы, загружаемые через HTTP или генерируемые на лету, поэтому невозможно знать все классы доступны.

0 голосов
/ 09 января 2013

Вот один, http://grepcode.com/file/repo1.maven.org/maven2/com.metapossum/metapossum-scanner/1.0.1/com/metapossum/utils/scanner/PackageScanner.java

Мы использовали его в нашем облегченном Java Framework, Snow, и он отлично работает.

Мавен как

<dependency>
   <groupId>com.metapossum</groupId>
   <artifactId>metapossum-scanner</artifactId>
   <version>1.0.1</version>
</dependency>    
...