【发布时间】:2014-08-19 15:02:58
【问题描述】:
我有我的自定义 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 手动加载类路径中的文件?
【问题讨论】:
-
为什么要使用自定义插件而不是现有插件?您希望涵盖哪些现有插件未涵盖的特殊情况?
-
我必须实现一个特定的框架,我需要使用 maven 插件来实现。
标签: java maven maven-plugin