27

默认情况下,maven surefile 插件在隔离(分叉)环境中运行测试。您可以使用以下配置覆盖此行为:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <forkMode>never</forkMode>
      </configuration>
    </plugin>
  </plugins>
</build>

如果你需要调试你的测试,你应该使用这个配置片段。或者您可以简单地按以下方式运行 maven build:

$ mvn -Dmaven.surefire.debug tests

这将在端口 5005 上启动调试器。

我的问题是:分叉策略有什么好处,为什么选择作为 Maven 构建的默认策略?非分叉策略不是更直接,因此应该用作默认策略(maven 是配置工具的约定,对吧)?

4

2 回答 2

18

我的问题是:分叉策略有什么好处,为什么选择作为 Maven 构建的默认策略?

默认情况下,Surefire 使用仅清单 JAR 分叉您的测试。IMO,主要优点是:

  1. 它提供了一个带有某种“正确”类路径的隔离环境。
  2. 它保护了 Maven 进程本身(这是一件好事,特别是如果 Maven 嵌入在您的 IDE 中运行)。

非分叉策略不是更直接,因此应该用作默认策略吗?

直截了当干什么?在 IDE 中轻松调试?我相信这不是最初的意图(如果需要,我更喜欢连接远程调试器并保持主 Maven 进程的安全)。

也可以看看

于 2010-07-06T13:33:43.170 回答
1

如果设置为“true”或“once”,分叉模式有助于加载系统类路径。但是如果使用 maven-surefire 2.5 插件,有时设置 fork mode=true 会导致“命令行太长”或“测试失败”等错误。为避免此错误,建议使用 suefire 插件 2.5 ser forkmode=never whn

于 2010-10-20T19:45:02.347 回答