com.google.common.reflect.ClassPathを使用して、特定パッケージ配下のクラスを取得してみる。
pom.xml
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
getTopLevelClassesRecursiveメソッドで指定パッケージより下のパッケージから再帰的にクラスを取得してくれます。ただ単に、指定パッケージ内のクラス一覧を取得したい場合はgetTopLevelClassesメソッドを使用します。
ClassLoader loader = Thread.currentThread().getContextClassLoader();
try {
Set<Class<?>> classes = ClassPath.from(loader)
.getTopLevelClassesRecursive(getClass().getPackage().getName()).stream()
.map(info -> info.load())
.collect(Collectors.toSet());
classes.forEach(System.out::println);
} catch (IOException e) {
// TODO
}
※インナークラスについては取得できません。
※TopLevelであれば、enum, interface, abstract classも取得できます。