Czy Maven może być mniej gadatliwy?

104

Maven wypluwa zbyt wiele linii wyjścia według mojego gustu (lubię sposób uniksowy: brak wiadomości to dobra wiadomość).

Chcę pozbyć się wszystkich linii [INFO], ale nie mogłem znaleźć żadnej wzmianki o argumencie lub ustawieniach konfiguracyjnych, które kontrolują szczegółowość Mavena.

Czy nie ma sposobu podobnego do LOG4J, aby ustawić poziom dziennika?

Asaf Bartov
źródło
2
Z Maven 3.6.1 (kwiecień 2019, 10+ lat później) mvn --no-transfer-progress ...(lub w mvn -ntpprzypadku szortów) powinno być odpowiednim rozwiązaniem. Zobacz moją odpowiedź poniżej .
VonC

Odpowiedzi:

132

Możesz wypróbować przełącznik -q .

-q, - quiet Ciche wyjście - pokazuje tylko błędy

Jorge Ferreira
źródło
2
@sheki: Aby wyjaśnić, ta opcja nie wyłącza komunikatów debugowania rejestratora - musisz to wyłączyć w ustawieniach rejestratora. Na przykład, jeśli używasz logback, dołączenie pliku src / test / resources / logback-test.xml do twojego projektu pozwoli ci dostosować poziom rejestrowania do „off” w fazie testowej. To wszystko posprząta.
codeturner
10
Mój problem polega na tym, że -qjest za cicho. Uruchamiam maven pod CI i chcę zobaczyć kroki, które trzeba wykonać (aby śledzić postęp), ale wskaźniki pobierania robią bałagan na wyświetlaczu innym niż ANSI. Czy istnieje sposób, aby wyłączyć tylko wskaźniki postępu pobierania?
Guss
6
@Guss: Jeśli chcesz, aby znikały tylko wiadomości Downloading / Downloaded, użyj, -Baby włączyć tryb wsadowy (i tak powinieneś mieć go w swoim systemie CI!), A następnie ustaw tak, MAVEN_OPTS="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"aby wyłączyć informacje o postępie pobierania.
ankon
1
W maven 3.5.x faktycznie muszę włączyć --batch-mode( -B), aby -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warnsztuczka zadziałała.
Auke
jeśli masz ochotę, przesłałem propozycję rozwiązania kompatybilnego z problemami trybu interaktywnego.apache.org/jira/browse/MNG-6605 , github.com/apache/maven/pull/239
Ray
27

-q, jak wspomniano powyżej, jest tym, czego potrzebujesz. Alternatywą może być

-B , --batch-mode Uruchom w trybie nieinteraktywnym (wsadowym) Tryb wsadowy jest niezbędny, jeśli chcesz uruchomić Maven w nieinteraktywnym, ciągłym środowisku integracji. Podczas pracy w trybie nieinteraktywnym Maven nigdy nie przestanie akceptować danych wejściowych od użytkownika. Zamiast tego użyje rozsądnych wartości domyślnych, gdy będzie to wymagało wprowadzenia.

A także zredukuje komunikaty wyjściowe mniej więcej do podstawowych.

Stanislav
źródło
jest używany w trybie nieinteraktywnym, który pomaga podczas automatyzacji przebiegów
Stanislav,
22

Mój problem polega na tym, że -q jest zbyt ciche. Biegnę maven pod CI

Dzięki Maven 3.6.1 (kwiecień 2019 r.) Masz teraz możliwość wstrzymania postępu transferu podczas pobierania / przesyłania w trybie interaktywnym .

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

lub w skrócie:

mvn -ntp ... ....

To właśnie zaproponował Ray w komentarzach do MNG-6605 i PR 239 .

VonC
źródło
To rozwiązanie pomija wysyłanie wiadomości, a także pobieranie, co zwykle nie jest pożądane w deployzadaniu
Hilikus
6

Użyj opcji wiersza polecenia -q lub --quiet

Sietse
źródło
2

Jeśli chcesz tylko pozbyć się [INFO]wiadomości, możesz również zrobić:

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

Aby ukryć wszystkie wyjścia (z wyjątkiem błędów), możesz przekierować stdoutdo /dev/null:

mvn ... 1>/dev/null

(Działa to tylko wtedy, gdy używasz bash(lub podobnych powłok) do uruchamiania poleceń Mavena.)

m13r
źródło
0

Maven 3.1.x używa SLF4j do logowania, instrukcje konfiguracji można znaleźć na https://maven.apache.org/maven-logging.html

W skrócie: albo zmodyfikuj ${MAVEN_HOME}/conf/logging/simplelogger.properties, albo ustaw te same właściwości za pomocą MAVEN_OPTSzmiennej środowiskowej.

Na przykład: ustawienie MAVEN_OPTSdo -Dorg.slf4j.simpleLogger.log.org.apache.maven.cl‌​i.transfer.Slf4jMave‌​nTransferListener=wa‌​rnkonfiguruje rejestrowanie transferu słuchacza trybie wsadowym i -Dorg.slf4j.simpleLogger.defaultLogLevel=warnustawia domyślny poziom dziennika.

ankon
źródło
0

Istniejąca odpowiedź pomaga filtrować na podstawie poziomu dziennika przy użyciu --quiet. Zauważyłem, że wiele komunikatów INFO jest przydatnych do debugowania, jednak komunikaty dziennika pobierania artefaktów, takie jak poniższe, były głośne i nie były pomocne.

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

Znalazłem to rozwiązanie:

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
źródło