执行自定义maven插件时获取资源文件

时间:2014-08-19 15:02:59

标签: java maven maven-plugin

我有自定义maven插件,例如,必须在测试阶段以编程方式运行测试。所以我有类似的东西

@Mojo(name = "aggregate", requiresDependencyResolution = ResolutionScope.RUNTIME)
public class AcceptanceTestMojo extends AbstractMojo {

  @Override
  public void execute() throws MojoExecutionException, MojoFailureException {
    TestExecutor testExecutor = new TestExecutor();
    testExecutor.setTestClasses(new Class[]{TestClass.class});
    testExecutor.run();
  }

}

所以问题来了,因为TestClass.class来自另一个maven模块,实际上我想要获取的资源被加载到该模块类路径中。在那个TestClass中,我有以下方法:

public Object[][] retrieveFile() throws IOException {
    String[] issuesKeys = IOUtils.toString(
        Thread.currentThread().getContextClassLoader().getResourceAsStream("fileName"))
    .split("\\n");
    ....
    ....
  }

如果我构建了TestClass所属的模块,那么一切正常,因为Thread.currentThread()。getContextClassLoader()正在加载正确的ClassLoader,但如果用我的插件运行它,因为我以编程方式运行测试Thread.currentThread ()。getContextClassLoader()正在加载我的插件的类路径,因此我想要检索的文件不存在,并且抛出了RuntimeException。

所以我的问题是如何获取正确的ClassLoader以便能够获取文件或者有没有办法用java手动加载类路径中的文件?

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案 - 我修改了currentThread ClassLoader-我从正在执行插件的maven项目的类路径中获得了所有必需的类。注入MavenProject bean可以实现这一点:

@Component
private MavenProject project;