내 작업 영역에 4 개의 Eclipse 플러그인 프로젝트 (새 Java 프로젝트 작성, 마우스 오른쪽 버튼 클릭, 구성, 플러그인 프로젝트로 변환)가 있습니다. 첫 번째 (my.runtime
)에는 java.util.ServiceLoader
을 통해 해당 인터페이스의 모든 구현을로드하고 (String getName()
) 메서드를 호출하여 결과를 수집하고 반환하는 메서드 (List<String> getAllFactoryNames()
)를 정의하는 인터페이스 (MyFactoryInterface
)와 클래스 (MyClient
) 목록. 이클립스 플러그인의 ServiceLoader 테스트
"Dummy"
를 반환
MyDummy
) 이름이 더미 구현에 의해 반환되는 경우 확인, 내가 (조각-호스트로
my.runtime
로 설정
my.runtime.test
) 두 번째 프로젝트의 JUnit 테스트를, 그 클래스를 테스트하려면
my.runtime.test
프로젝트가
MyClient.getAllFactoryNames()
에 의해 반환 된 목록에 있습니다. 지금까지, 그것은 잘 작동합니다. 내가 인사의 목록 (
"Hello "+name
)을 반환하는
MyClient.getAllFactoryNames()
에 의해 반환 된 이름을 사용하는 클래스 (
MyHello
)가 세 번째 프로젝트에서
(의존성 등
my.runtime
와
my.extension
).
다시 말하지만,이 테스트를 위해, 나는 (조각-호스트로
my.extension
와
my.extension.test
) 프로젝트 (
MyWorld
이름으로
"World"
을 반환하는) 다른 구현을 포함하고
"Hello World"
가
MyHello.getGreetings()
에 의해 반환 된 인사에 있는지 확인 JUnit 테스트 케이스를 . MyClient는 여전히
MyDummy
구현 만 찾으며
MyWorld
구현은 찾지 않기 때문에이 테스트는 실패합니다. 두 구현 모두
META-INF/services/my.runtime.MyFactoryInterface
파일의 항목과 일치합니다.
나는 현재 구현을로드하기 위해 다음 코드를 사용
ServiceLoader<MyFactoryInterface> myFactoryLoader = ServiceLoader.load(MyFactoryInterface.class);
for (MyFactoryInterface myFactory : myFactoryLoader) {
내가 ServiceLoader.load
에 두 번째 인자로 클래스 로더를 제공 할 수 있다는 것을 알고 있지만, 나는 모든 플러그인을 알고 하나를 얻을하는 방법을 몰라 프로젝트 ... 어떤 제안? 아니면 ServiceLoader가이 문제에 적합한 도구가 아닌가?
런타임에 이름이 알 수 있듯이 런타임에 다른 프로그램에서 사용하는 프로젝트 인 Eclipse와 마찬가지로 런타임에 다른 문제가 아니라 다른 플러그인에서 사용되기 때문에 플러그인 프로젝트이기 때문에 문제가 다소 구체적이라고 생각합니다. 이클립스에서 테스트 된 런타임 프로그램 용 데이터를 생성하고 테스트 중에 런타임 코드를 호출한다. – hd42