【问题标题】:Can Maven be made less verbose?Maven 可以不那么冗长吗?
【发布时间】:2010-09-09 10:07:40
【问题描述】:

Maven 根据我的喜好输出了太多行(我喜欢 Unix 的方式:没有消息就是好消息)。

我想删除所有 [INFO] 行,但我找不到任何关于控制 Maven 详细程度的参数或配置设置的提及。

没有类似LOG4J的方式来设置日志级别吗?

【问题讨论】:

  • 对于 Maven 3.6.1(2019 年 4 月,10 多年后),mvn --no-transfer-progress ...(或 mvn -ntp 用于短裤)应该是一个合适的解决方案。见my answer below

标签: maven output verbosity


【解决方案1】:

你可以试试-q switch

-q,--quiet 安静输出 - 只显示错误

【讨论】:

  • @sheki:澄清一下,此选项不会禁用记录器调试消息 - 您需要通过记录器设置将其关闭。例如,如果您使用 logback,在项目中包含 src/test/resources/logback-test.xml 文件将允许您在测试阶段将日志记录级别自定义为“关闭”。这将清理所有内容。
  • 我的问题是-q 太安静了。我在 CI 下运行 maven,我想看看它采取的步骤(跟踪进度),但是下载指示器正在弄乱非 ANSI 显示。有没有办法只关闭下载进度指示器?
  • @Guss:如果您只想让正在下载/已下载的消息消失,请使用 -B 启用批处理模式(无论如何,您应该在 CI 系统中拥有它!),然后设置 @987654329 @ 杀死下载的进度信息。
  • 在 maven 3.5.x 中,我实际上需要启用 --batch-mode (-B) 才能使 -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn 技巧起作用。
  • 如果您愿意,我已经提交了与交互模式兼容的建议解决方案 issues.apache.org/jira/browse/MNG-6605 , github.com/apache/maven/pull/239
【解决方案2】:

-q 如上所述是您所需要的。另一种可能是:

-B,--batch-mode 以非交互(批处理)模式运行 如果您需要在非交互式的持续集成环境中运行 Maven,批处理模式是必不可少的。在非交互模式下运行时,Maven 将永远不会停止接受用户的输入。相反,它会在需要输入时使用合理的默认值。

并且还会或多或少地将输出消息减少到基本要素。

【讨论】:

  • 它用于非交互模式,有助于自动化运行
【解决方案3】:

我的问题是 -q 太安静了。我在 CI 下运行 maven

使用Maven 3.6.1 (April 2019),您现在可以在交互模式下下载/上传时抑制传输进度

mvn --no-transfer-progress ....

或者简而言之:

mvn -ntp ... ....

这就是Ray 提议的in the commentsMNG-6605PR 239

【讨论】:

  • 此解决方案禁止上传消息和下载,这在deploy 任务中通常是不需要的
【解决方案4】:

官方链接: https://maven.apache.org/maven-logging.html

您可以在JVM参数中添加:

-Dorg.slf4j.simpleLogger.defaultLogLevel=WARN

注意大写。

【讨论】:

    【解决方案5】:

    使用 -q 或 --quiet 命令行选项

    【讨论】:

      【解决方案6】:

      如果您只想删除 [INFO] 消息,您也可以这样做:

      mvn ... | fgrep -v "[INFO]"
      

      要抑制 所有 输出(错误除外),您可以将 stdout 重定向到 /dev/null

      mvn ... 1>/dev/null
      

      (仅当您使用 bash(或类似的 shell)运行 Maven 命令时才有效。)

      【讨论】:

        【解决方案7】:

        Maven 3.1.x 使用 SLF4j 进行日志记录,您可以在 https://maven.apache.org/maven-logging.html 找到如何配置它的说明

        简而言之:要么修改${MAVEN_HOME}/conf/logging/simplelogger.properties,要么通过MAVEN_OPTS 环境变量设置相同的属性。

        例如:将MAVEN_OPTS 设置为-Dorg.slf4j.simpleLogger.log.org.apache.maven.cl‌​i.transfer.Slf4jMave‌​nTransferListener=wa‌​rn 配置批处理模式传输侦听器的日志记录,-Dorg.slf4j.simpleLogger.defaultLogLevel=warn 设置默认日志级别。

        【讨论】:

          【解决方案8】:

          现有答案可帮助您使用 --quiet 根据日志级别进行过滤。我发现许多 INFO 消息对调试很有用,但是像下面这样的下载工件日志消息很吵而且没有帮助。

          Downloading: http://nexus:8081/nexus/content/groups/public/org/apache/maven/plugins/maven-compiler-plugin/maven-metadata.xml
          

          我找到了这个解决方案:

          https://blogs.itemis.com/en/in-a-nutshell-removing-artifact-messages-from-maven-log-output

          mvn clean install -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-02-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-05
            • 2015-10-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多