web-dev-qa-db-ja.com

Mavensurefireプラグインフォークモード

デフォルトでは、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ビルドを実行することもできます。

$ mvn -Dmaven.surefire.debug tests

これにより、ポート5005でデバッガーが起動します。

私の質問は、フォーク戦略にはどのような利点があり、なぜMavenビルドのデフォルト戦略として選択されるのですか?非フォーク戦略はより単純なので、デフォルトとして使用する必要がありませんか(Mavenは設定より規約です)?

24
Denis Bazhenov

私の質問は、フォーク戦略にはどのような利点があり、なぜMavenビルドのデフォルト戦略として選択されるのですか?

デフォルトでは、SurefireはマニフェストのみのJARを使用してテストをフォークします。 IMO、主な利点は次のとおりです。

  1. 何らかの形で「正しい」クラスパスを備えた分離環境を提供します。
  2. mavenプロセス自体を保護します(これは、特にMavenがIDEに埋め込まれて実行されている場合)良いことです)。

非フォーク戦略はより単純なので、デフォルトとして使用する必要がありますか?

何のために簡単ですか? IDE内で簡単にデバッグできますか?それは当初の意図ではなかったと思います(必要に応じてリモートデバッガーに接続し、メインのMavenプロセスを安全に保つことを好みます)。

も参照してください

16
Pascal Thivent

フォークモードは、「true」または「once」に設定されている場合、システムクラスパスをロードするのに役立ちます。ただし、maven-surefire 2.5プラグインが使用されている場合、fork mode = trueを設定すると、「コマンドラインが長すぎる」や「テストに失敗する」などのエラーが発生することがあります。このエラーを回避するには、suefireプラグイン2.5を使用しているときにforkmode = neverを実行することをお勧めします。

1