动态设置 Maven Surefire JVM 类路径

Dynamically set Maven Surefire JVM classpath

我试图在 运行 我们的 Maven 单元测试时添加 JVM 类路径参数,方法是添加以下 Maven 参数,"dir" 替换为我想要的 clasaspath。

MAVEN_OPTS = -cp "dir"

这会正确地添加到 Java 个参数中

但我的 "dir" 从未正确添加到类路径中。 从未在类路径中找到所需的文件,并且在使用

打印类路径时总是丢失
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();

Maven 的 JVM 运行 与 运行 测试时使用的 JVM 之间存在差异。

surefire 插件将为 运行 您的测试用例生成自己的 JVM。默认情况下,它将在该 JVM 的类路径中包含以下内容:

  • 您项目的 类 目录
  • 你的项目的test-类目录
  • 您项目的依赖项。

如果我没有正确理解你的问题,那么你想将另一个目录添加到 JVM 的类路径中,该目录正在 运行你的测试中。如果是这样,那么您可以像这样添加额外的类路径条目:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20</version>
    <configuration>
      <additionalClasspathElements>
        <additionalClasspathElement>path/to/your/additional/directory</additionalClasspathElement>
      </additionalClasspathElements>
    </configuration>
</plugin>

更多详情here

如果您想通过命令行参数动态更改 surefire JVM 使用的类路径(正如您提到的 MAVEN_OPTS 所暗示的那样),那么您可以像这样定义一个 additionalClasspathElement ...

<additionalClasspathElement>${additionalClasspathDir}</additionalClasspathElement>

...然后像这样调用 Maven:

mvn test -DadditionalClasspathDir=path/to/your/additional/directory