Java 执行自定义maven插件时获取资源文件
我有自己的自定义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
@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插件。