【问题标题】:Getting resource files when executing custom maven plugin执行自定义maven插件时获取资源文件
【发布时间】: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


【解决方案1】:

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

@Component
private MavenProject project;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多