Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行自定义maven插件时获取资源文件_Java_Maven_Maven Plugin - Fatal编程技术网

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

Java 执行自定义maven插件时获取资源文件,java,maven,maven-plugin,Java,Maven,Maven Plugin,我有自己的自定义maven插件,例如,它必须在测试阶段以编程方式运行测试。所以我有类似的东西 @Mojo(name = "aggregate", requiresDependencyResolution = ResolutionScope.RUNTIME) public class AcceptanceTestMojo extends AbstractMojo { @Override public void execute() throws MojoExecutionException

我有自己的自定义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()正在加载正确的类加载器,但是如果在我以编程方式运行测试时使用插件运行它,Thread.currentThread().getContextClassLoader()正在加载插件的类路径,因此,我要检索的文件不在那里,因此引发了RuntimeException


因此,我的问题是如何获得正确的类加载器,以便能够获得文件,或者是否有一种方法可以使用java手动在类路径中加载文件?

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

@Component
private MavenProject project;

为什么要使用自定义插件而不是现有的插件?什么样的特殊情况下,你想涵盖哪些是不包括在现有的插件?我必须实现一个特定的框架,我需要这样做与maven插件。