Java Guava 라이브러리에서 제공하는 ClassPath를 모든 클래스 찾기

여기서는 guava의 라이브러리에 있는 ClassPath를 이용하여 패키지에 포함된 클래스를 찾는 방법을 살펴본다.

로드 가능하는 모든 클래스 찾기

여기서는 Google Guava 라이브러리를 사용하여 클래스를 찾는 방법을 살펴보겠다.
Google Guava는 클래스 로더의 소스를 검색하고 로드 가능한 모든 클래스을 찾는 ClassPath 유틸리티 클래스를 제공한다.

아래 예제는 입력 받은 패키지 이하에 존재하는 모든 클래스를 찾아서 표시해준다.

package com.devkuma.guava.classloader;

import java.io.IOException;
import java.util.Set;
import java.util.stream.Collectors;

import com.google.common.reflect.ClassPath;

public class FindAllClasses {

    public Set<Class> findAllClasses(String packageName) throws IOException {
        return ClassPath.from(ClassLoader.getSystemClassLoader())
                        .getAllClasses()
                        .stream()
                        .filter(clazz -> clazz.getPackageName()
                                              .startsWith(packageName))
                        .map(clazz -> clazz.load())
                        .collect(Collectors.toSet());
    }

    public static void main(String[] args) throws IOException {
        FindAllClasses instance = new FindAllClasses();

        Set<Class> classes = instance.findAllClasses("com.devkuma.guava");
        for (Class clazz : classes) {
            System.out.println(clazz.getCanonicalName());
        }
    }
}

실행 결과:

com.devkuma.guava.joiner.JoinerWithKeyValueSeparator
com.devkuma.guava.joiner.JoinerArrayJoin
com.devkuma.guava.strings.StringCommonPrefixCommonSuffix
com.devkuma.guava.joiner.JoinerListJoin

... 이하 생략 ...

입력 받은 패키지명을 com.devkuma.guava을 입력하였다.




최종 수정 : 2024-01-18