O Maven pode ser menos prolixo?

104

Maven despeja muitas linhas de saída para o meu gosto (eu gosto do jeito Unix: nenhuma notícia é uma boa notícia).

Quero me livrar de todas as linhas [INFO], mas não consegui encontrar nenhuma menção a um argumento ou configuração que controle a verbosidade do Maven.

Não existe uma maneira semelhante ao LOG4J de definir o nível de registro?

Asaf Bartov
fonte
2
Com o Maven 3.6.1 (abril de 2019, mais de 10 anos depois), mvn --no-transfer-progress ...(ou mvn -ntppara shorts) deve ser uma solução adequada. Veja minha resposta abaixo .
VonC

Respostas:

132

Você pode tentar a opção -q .

-q, - quiet Saída silenciosa - mostra apenas erros

Jorge Ferreira
fonte
2
@sheki: Para esclarecer, esta opção não desabilita as mensagens de depuração do logger - você precisa desligar isso nas configurações do logger. Por exemplo, se você estiver usando logback, incluir um arquivo src / test / resources / logback-test.xml em seu projeto permitirá que você personalize seu nível de log para 'desligado' durante a fase de teste. Isso vai limpar tudo.
codeturner de
10
Meu problema é que -qestá muito quieto. Estou executando o maven em CI e quero ver as etapas que ele executa (para rastrear o progresso), mas os indicadores de download estão bagunçando a exibição não ANSI. Existe uma maneira de desligar apenas os indicadores de progresso de download?
Guss de
6
@Guss: Se você quiser apenas que as mensagens Baixando / Baixadas desapareçam, use -Bpara habilitar o modo em lote (você deve ter isso em seu sistema de CI de qualquer maneira!) E, em seguida, configure MAVEN_OPTS="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"para eliminar as informações de andamento para os downloads.
ankon
1
No maven 3.5.x eu realmente preciso habilitar --batch-mode( -B) para que o -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warntruque funcione.
Auke de
se você quiser, enviei uma proposta de solução compatível com o modo interativo issues.apache.org/jira/browse/MNG-6605 , github.com/apache/maven/pull/239
Ray
27

-q como disse acima é o que você precisa. Uma alternativa poderia ser

-B , --batch-mode Executar em modo não interativo (lote) O modo em lote é essencial se você precisar executar o Maven em um ambiente de integração contínua não interativo. Quando executado no modo não interativo, o Maven nunca para para aceitar a entrada do usuário. Em vez disso, ele usará valores padrão razoáveis ​​quando exigir entrada.

E também reduzirá as mensagens de saída mais ou menos ao essencial.

Stanislav
fonte
é usado para o modo não interativo, o que ajuda na automação de execuções
Stanislav
22

Meu problema é que -q é muito silencioso. Estou executando maven sob CI

Com o Maven 3.6.1 (abril de 2019) , agora você tem a opção de suprimir o andamento da transferência ao fazer download / upload no modo interativo .

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

ou em suma:

mvn -ntp ... ....

Isso é o que Ray propôs nos comentários com MNG-6605 e PR 239 .

VonC
fonte
Esta solução suprime mensagens de upload, bem como downloads, o que normalmente não é desejado em uma deploytarefa
Hilikus
17

Link oficial: https://maven.apache.org/maven-logging.html

Você pode adicionar os parâmetros JVM :

-Dorg.slf4j.simpleLogger.defaultLogLevel=WARN

Cuidado com MAIÚSCULAS.

jgrtalk
fonte
6

Use as opções de linha de comando -q ou --quiet

Sietse
fonte
2

Se você quiser apenas se livrar das [INFO]mensagens, também pode fazer:

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

Para suprimir todas as saídas (exceto erros), você pode redirecionar stdoutpara /dev/nullcom:

mvn ... 1>/dev/null

(Isso só funciona se você usar bash(ou shells semelhantes) para executar os comandos do Maven.)

m13r
fonte
0

Maven 3.1.x usa SLF4j para registro, você pode encontrar instruções sobre como configurá-lo em https://maven.apache.org/maven-logging.html

Resumindo: modifique ${MAVEN_HOME}/conf/logging/simplelogger.propertiesou defina as mesmas propriedades por MAVEN_OPTSmeio da variável de ambiente.

Por exemplo: definir MAVEN_OPTSpara -Dorg.slf4j.simpleLogger.log.org.apache.maven.cl‌​i.transfer.Slf4jMave‌​nTransferListener=wa‌​rnconfigura o registro do ouvinte de transferência do modo em lote e -Dorg.slf4j.simpleLogger.defaultLogLevel=warndefine o nível de registro padrão.

ankon
fonte
0

A resposta existente ajuda a filtrar com base no nível de log usando --quiet. Descobri que muitas mensagens INFO são úteis para depuração, no entanto, as mensagens de log de artefato de download, como as seguintes, eram barulhentas e inúteis.

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

Encontrei esta solução:

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
errant.info
fonte