我正在将Maven与Eclipse结合使用(使用M2E)来构建一个依赖java.util.ServiceLoader来动态加载某些工厂类的项目。当我在Maven中运行它时,它运行良好,但是当我使用内置的Eclipse JUnit4 Runner运行测试时,它无法拾取服务,并且测试未成功。
我需要手动将META-INF / services添加到JUnit构建路径吗?我无法使其在src / main / resources / META-INF / services或src / main / java / META-INF / services中工作。它与M2E设置构建路径的方式有关吗?我在一个全新的项目中进行了测试,但仍然失败。
失败的基本代码是:
public class TestServiceLoader<S>
{
public TestServiceLoader(final Class<S> serviceClass)
{
ServiceLoader<S> serviceLoader =
java.util.ServiceLoader.load(serviceClass, serviceClass.getClassLoader());
Iterator<S> services = serviceLoader.iterator();
if(!services.hasNext())
{
throw new RuntimeException("Failed to get any services for this class");
}
}
}
Run Code Online (Sandbox Code Playgroud)
测试看起来像:
@Test
public final void testTestServiceLoader()
{
TestServiceLoader<TestFactory> serviceLoader = new TestServiceLoader<TestFactory>(TestFactory.class);
}
Run Code Online (Sandbox Code Playgroud)
TestFactory定义为:
public interface TestFactory
{
}
Run Code Online (Sandbox Code Playgroud)
TestFactoryImpl定义为:
public class TestFactoryImpl implements …Run Code Online (Sandbox Code Playgroud)