代码之家  ›  专栏  ›  技术社区  ›  Denis Bazhenov

Maven Surefire插件分叉模式

  •  24
  • Denis Bazhenov  · 技术社区  · 15 年前

    默认情况下,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是Convention over Configuration工具,对吧)?

    2 回复  |  直到 15 年前
        1
  •  16
  •   Pascal Thivent    15 年前

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

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

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

    非工作策略是否更简单,因此应作为默认策略使用?

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

    也见

        2
  •  1
  •   Pushpinder Rattan    15 年前

    如果设置为“真”或“一次”,分叉模式有助于加载系统类路径。 但是如果使用Maven Surefire 2.5插件,有时将fork mode=true设置为“commmand line too long”(命令行太长)或“there are test failures”(测试失败)。为避免此错误,建议使用Suefire插件2.5将其设置为ser forkmode=never whn。

    推荐文章