我希望防止 maven 显示 INFO 消息,我希望只看到警告和错误(如果有的话)。
如何实现这一点,最好是通过更改调用 maven 的命令行?
不幸的是,即使使用 maven3,也只能通过修补源代码来实现这一点。
以下是如何做到这一点的简短说明。
克隆或叉 Maven3回购: “ git 克隆 https://github.com/apache/maven-3.git”
编辑 org.apache.maven.cli
cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_INFO );
到
cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_WARN );
在当前快照版本中,它位于第270行
然后运行“ mvninstall”,您的新 maven 发行版将位于“ apache-maven target”文件夹中
请参阅参考资料中的这个差异: https://github.com/ushkinaz/maven-3/commit/cc079aa75ca8c82658c7ff53f18c6caaa32d2131
如果您正在使用 Logback,只需将这个 logback-test.xml文件放入 src/test/resources目录:
logback-test.xml
src/test/resources
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
编辑: 这个答案来自 二零一三年,现在可能有更好的方法来做这个,请考虑其他的答案。
mvn validate clean install | egrep -v "(^\[INFO\])"
或者
mvn validate clean install | egrep -v "(^\[INFO\]|^\[DEBUG\])"
mvn validate clean install | findstr /V /R "^\[INFO\] ^\[DEBUG\]"
我做了一个小调查,因为我也对解决方案感兴趣。
根据 http://books.sonatype.com/mvnref-book/reference/running-sect-options.html#running-sect-verbose-option
目前,maven 3.1.x 使用 SLF4J 来登录 System.out。 您可以在文件中修改日志记录设置:
${MAVEN_HOME}/conf/logging/simplelogger.properties
根据页面: http://maven.apache.org/maven-logging.html
我认为您应该能够通过命令行参数设置简单日志记录器的默认日志级别,如下所示:
$ mvn clean package -Dorg.slf4j.simpleLogger.defaultLogLevel=debug
但是 我无法让它工作。我想这样做的唯一问题是,maven 从类路径上的配置文件中获取默认级别。我还通过 System.properties 尝试了其他一些设置,但都不成功。
您可以在 github 上找到 slf4j 的源代码: Slf4j github
这里简单记录器的来源: Slf4j/jcl-over-slf4j/src/main/java/org/apache/commons/log/impl/SimpleLog.java
神经丛加载器加载 simplelogger.properties。
simplelogger.properties
例如,可以使用 MAVEN _ OPTS 来实现这一点 MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean
MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn clean
而不是将系统属性直接放在命令行上(至少在 maven 3.3.1中是这样)
如果您希望在所有 maven 调用中更改登录日志,可以考虑使用 ~/.mavenrc设置 MAVEN_OPTS。
~/.mavenrc
MAVEN_OPTS
我注意到,当使用 Maven Sunfire 插件的2.20.1版本时,所有的警告都被写到一个转储流文件中。例如 /myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream
/myproject/target/surefire-reports/2017-11-11T23-02-19_850.dumpstream
最简单的方法是升级到 Maven 3.3.1或更高版本,以利用 ${maven.projectBasedir}/.mvn/jvm.config支持。
${maven.projectBasedir}/.mvn/jvm.config
然后,您可以使用 Maven 的 SL4FJ 的 SimpleLogger支持中的任何选项来配置所有日志记录器或特定的日志记录器。例如,下面介绍了如何在 warn级别发出所有警告,只有配置为在 error记录日志的 PMD 除外:
warn
error
cat .mvn/jvm.config -Dorg.slf4j.simpleLogger.defaultLogLevel=warn -Dorg.slf4j.simpleLogger.log.net.sourceforge.pmd=error
有关使用 Maven 进行日志记录的更多细节,请参见 给你。
在 simplelogging.properties文件中将 info改为 error将有助于达到您的要求。
simplelogging.properties
info
只需更改下面一行的值
org.slf4j.simpleLogger.defaultLogLevel=info
org.slf4j.simpleLogger.defaultLogLevel=error
您可以通过在命令行本身中使用下面的命令来实现这一点
-e for error -X for debug -q for only error
例如:
mvn test -X -DsomeProperties='SomeValue' [For Debug level Logs] mvn test -e -DsomeProperties='SomeValue' [For Error level Logs] mvn test -q -DsomeProperties='SomeValue' [For Only Error Logs]
转到 ${MAVEN_HOME}/conf/logging/中的 simplelogger.properties并设置以下属性:
${MAVEN_HOME}/conf/logging/
org.slf4j.simpleLogger.defaultLogLevel=warn org.slf4j.simpleLogger.log.Sisu=warn org.slf4j.simpleLogger.warnLevelString=warn
warning
在 Debian 中,改变 Maven 3.6在运行时的日志级别,而不必改变 simplelogger.properties文件,这对我来说就像是一种魔力:
MAVEN_OPTS='-Dorg.slf4j.simpleLogger.defaultLogLevel=error' mvn test