ModuleFinder — 모듈을 찾는 파인더
ModuleFinder — 모듈을 찾는 파인더
ModuleFinder는 모듈을 찾는 파인더(finder) 예요. 해석(resolution)이나 서비스 바인딩 중에 모듈을 찾는 데 사용돼요.
본문
ModuleFinder는 주어진 이름의 모듈을 하나만 찾을 수 있어요. 예를 들어 디렉터리 시퀀스에서 모듈을 찾는 파인더는 주어진 이름의 모듈의 첫 번째 발생을 찾고, 시퀀스에서 더 뒤에 나타나는 같은 이름의 모듈은 무시해요.
예시
Path dir1 = ..., dir2 = ..., dir3 = ...;
ModuleFinder finder = ModuleFinder.of(dir1, dir2, dir3);
Optional<ModuleReference> omref = finder.find("jdk.foo");
omref.ifPresent(mref -> ... );
여기에 정의된 find와 findAll 메서드는 여러 이유로 실패할 수 있어요. 여기에는 I/O 오류, 모듈 설명자(module-info.class)를 파싱할 때 감지된 오류, 그리고 ModuleFinder.of가 반환한 파인더의 경우 디렉터리에서 같은 이름의 모듈이 둘 이상 발견된 경우 등이 포함돼요. 오류가 감지되면 이 메서드들은 적절한 원인과 함께 FindException을 던져요. FindException이 던져진 후의 ModuleFinder 동작은 정의되지 않아요. 예를 들어 예외가 던져진 뒤 find를 호출하면 예외를 일으킨 것과 같은 모듈을 스캔할 수도, 하지 않을 수도 있어요. 예외가 던져진 후에는 모듈 파인더를 버리는 걸 권장해요.
ModuleFinder는 스레드 안전할 필요가 없어요.
static 메서드
static ModuleFinder of(Path... entries)— 주어진 경로(들)에서 모듈을 찾는 파인더를 만들거나, JVM에 이미 정의된 모듈들을 찾는 파인더도 있어요.static ModuleFinder compose(ModuleFinder... finders)— 0개 이상의 모듈 파인더 시퀀스로부터 구성된 모듈 파인더를 반환해요.static ModuleFinder ofSystem()— 시스템 모듈을 찾는 파인더를 반환해요.
인스턴스 메서드
Optional<ModuleReference> find(String name)— 주어진 이름의 모듈에 대한 참조를 찾아요.Set<ModuleReference> findAll()— 이 파인더가 찾을 수 있는 모든 모듈의 집합을 반환해요.