动态设置 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
我试图在 运行 我们的 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