2017-08-15 141 views
1

我试图通过添加以下maven参数来运行我们的Maven单元测试时添加JVM classpath参数,将“dir”替换为我所需的clasaspath。动态设置Maven Surefire JVM类路径

MAVEN_OPTS = -cp “目录”

这正确,则得到的加入到Java参数

然而,我的 “目录” 是永远不会正确添加到类路径中。 在classpath中所需的文件从来没有发现,并与

ClassLoader cl = ClassLoader.getSystemClassLoader(); 
URL[] urls = ((URLClassLoader)cl).getURLs(); 

回答

1

打印出的类路径有运行测试时使用的Maven和JVM上运行一个JVM之间的差异时,总是丢失。

surefire插件将产生自己的JVM来运行你的测试用例。默认情况下,将包括以下对JVM的类路径:

  • 你的项目的类目录
  • 你的项目的测试类目录
  • 你的项目的依赖。

如果我已经正确地理解了您的问题,那么您希望将另一个目录添加到运行您的测试的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

如果要动态地改变通过命令行参数使用的万无一失JVM类路径(如您的MAVEN_OPTS提及暗示),那么你可以定义一个additionalClasspathElement这样的...

<additionalClasspathElement>${additionalClasspathDir}</additionalClasspathElement> 

..然后像这样调用Maven:

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

是否有任何方法将变量添加到这些路径中,形式如果maven操作?我们宁愿在我们的pom文件中没有硬编码路径 – Johng

+0

我已经更新了我的答案,以解决动态更改surefire插件使用的类路径的要求。 surefire插件明确了它如何编写它的类路径,以及如果你想要的目录不在项目的类路径中,并且不能添加到它(使用[Maven Build Helper Plugin](http://www.mojohaus.org/build) -helper-maven-plugin /)例子),那么使用'additionalClasspathElements'是你唯一的选择。 – glytching

+0

工作,只需要将-D前缀添加到变量 – Johng