默认类路径

surefire 插件按以下顺序构建测试类路径:

  1. 测试目录
  2. 目录_
  3. 项目依赖
  4. 其他类路径元素

其他类路径元素

如果您需要在 Surefire 执行时在类路径中添加更多内容(例如一些时髦的资源或特定于容器的 JAR),我们通常建议您将其作为依赖项添加到类路径中。考虑将共享 jar 部署到您组织的私有远程存储库。

但是,如果必须,您可以使用additionalClasspathElements元素将自定义资源/jar 添加到您的类路径。这将被视为绝对文件系统路径,因此您可能需要使用 ${basedir} 或其他结合相对路径的属性。请注意,附加的类路径元素被添加到类路径的末尾,因此您不能使用这些元素来覆盖项目依赖项或资源。

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <additionalClasspathElements>
            <additionalClasspathElement>path/to/additional/resources</additionalClasspathElement>
            <additionalClasspathElement>path/to/additional/jar</additionalClasspathElement>
          </additionalClasspathElements>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

删除依赖类路径元素

可以使用参数classpathDependencyExcludesclasspathDependencyScopeExclude从测试类路径中删除依赖项。通过指定要删除的 groupId:artifactId,可以从类路径中删除特定依赖项的列表。

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <classpathDependencyExcludes>
            <classpathDependencyExcludes>org.apache.commons:commons-email</classpathDependencyExcludes>
          </classpathDependencyExcludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

可以使用classpathDependencyScopeExclude从类路径中删除特定范围内的依赖项。依赖范围排除的有效值由org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter定义。

  • compile - 系统,提供,编译
  • 运行时- 编译,运行时
  • 测试- 系统、提供、编译、运行时、测试
    <project>
      [...]
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.9</version>
            <configuration>
              <classpathDependencyScopeExclude>runtime</classpathDependencyScopeExclude>
            </configuration>
          </plugin>
        </plugins>
      </build>
      [...]
    </project>