隐藏 maven "Running com.MyTest" 日志行

Hide maven "Running com.MyTest" log line

我在 mvn 输出中得到以下内容:

Running com.MyTest
Tests run: 1 , Failures: 0 , Errors: 0 , Skipped: 0 , Time elapsed: 0.02 sec - in com.MyTest

尽管有标志:

-Dsurefire.printSummary=false -Dsurefire.useFile=true

有没有办法隐藏第一行 - Running com.MyTest?

更多信息

应该是无关紧要的,不过我也补充一下:

-Dlogback.configurationFile=/Users/me/logback.xml

logback.xml 包含:

<configuration>
  <root level="OFF">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

pom.xml万无一失的配置

<project>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${maven.surefire.plugin}</version>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven.surefire.plugin}</version>
        <configuration>
          <includes>
            <include>**/*Test.class</include>
          </includes>
          <parallel>classes</parallel>
          <threadCount>10</threadCount>
          <useFile>false</useFile>
        </configuration>
      </plugin>

    </plugins>
  </build>

  <profiles>
    <profile>
      <id>coverage-per-test</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.15</version>
            <configuration>
              <properties>
                <property>
                  <name>listener</name>
                  <value>org.sonar.java.jacoco.JUnitListener</value>
                </property>
              </properties>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

为了不显示这一特定行,有必要不创建控制台记录器。 The code is creating this logger当下面方法returnstrue:

private boolean shouldReportToConsole()
{
    return isUseFile() ? isPrintSummary() : isRedirectTestOutputToFile() || isBriefOrPlainFormat();
}

再往下看,如果这个 returns trueConsoleReporter is created and it will write that line when the tests are started.

的实例

所以要么:

因此,根据您对 -Dsurefire.printSummary=false -Dsurefire.useFile=true 的配置,它应该可以工作,并且该行不应该出现在控制台中,也不应该出现在输出文件中。您的问题是 maven-surefire-plugin 的配置设置了 <useFile>false</useFile>POM 中配置的任何值直接优先于您在命令行中设置的值。这是为了确保当 POM 定义一个值时,它不能被覆盖并有助于实现可重现的构建。

所以你可以做的是强制 reportFormat 的值不正确(既不是 "brief" 也不是 "plain"),你会注意到 "Running " 行将不再发出。

虽然这有点笨拙。因此,另一种解决方案是定义 Maven 属性 并在命令行上覆盖 属性。在你的插件中,有:

<useFile>${surefire.plugin.useFile}</useFile>

并定义一个属性,默认为false:

<properties>
  <surefire.plugin.useFile>false</surefire.plugin.useFile>
</properties>

这样,构建的行为与以前相同。当您定义 -Dsurefire.plugin.useFile=true 时,您将覆盖 Maven 属性,这将确保 Surefire 启动 useFile 设置为 true.