【问题标题】:Maven surefire plugin fork modeMaven surefire 插件 fork 模式
【发布时间】:2011-03-12 06:44:03
【问题描述】:

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

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

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

$ mvn -Dmaven.surefire.debug tests

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

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

【问题讨论】:

标签: maven-2 surefire fork


【解决方案1】:

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

【讨论】:

  • 我认为这种错误只发生在 Windows 上,因为这个操作系统对命令行长度有一些限制。
【解决方案2】:

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

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

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

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

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

另见

【讨论】:

  • “分叉测试”是什么意思?
  • 分叉是指进程在新进程中执行任务而不是在自己的进程中执行任务。如果万一,这意味着测试将在单独的进程中运行,以获得最大的性能/并发性。有时您可能想要调整或完全关闭它(例如在调试时)。
  • 这使得 ide 中的测试实际上毫无用处
猜你喜欢
  • 2023-03-28
  • 2018-12-20
  • 1970-01-01
  • 2010-10-07
  • 2016-02-20
  • 2016-01-01
  • 2021-10-30
  • 2010-11-19
  • 1970-01-01
相关资源
最近更新 更多