繁体   English   中英

为什么Eclipse JUnit4 Runner没有选择META-INF / services文件

[英]Why does the Eclipse JUnit4 Runner not pick up META-INF/services files

我正在使用Maven和Eclipse(使用M2E)构建一个依赖java.util.ServiceLoader来动态加载一些工厂类的项目。 当我在Maven中运行它时它工作正常,但是当我使用内置的Eclipse JUnit4 Runner运行测试时,它无法获取服务并且测试不成功。

我需要做些什么来手动将META-INF /服务添加到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");
       }
   }
}

测试看起来像:

@Test
public final void testTestServiceLoader()
{
    TestServiceLoader<TestFactory> serviceLoader = new TestServiceLoader<TestFactory>(TestFactory.class);
}

TestFactory定义为:

public interface TestFactory
{

}

TestFactoryImpl定义为:

public class TestFactoryImpl implements TestFactory
{

}

我最初使用的是来自http://weblogs.java.net/blog/kohsuke/archive/2009/03/my_project_of_t.html的MetaInfServices生成器,但当我删除它并手动手动创建文件时,它仍然在在使用Maven Surefire插件运行时成功使用Eclipse的方式相同。

M2E开发人员似乎相信任何资源都会影响maven构建,即使在META-INF / services /是功能部分的情况下,尽管是资源:

“实际上,项目资源文件夹并不需要添加到构建路径中(Maven Builder在没有它的情况下可以正常工作),但在Package Explorer和其他Eclipse视图中它被认为是方便且看起来更好。” M2E常见问题

如果你想破解它,你可以显然将一个特殊的M2E配置文件编码到你的pom.xml文件中,以制作M2E增量构建过滤器和复制资源Sonatype M2Eclipse Wiki

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM