Skip to content

Instantly share code, notes, and snippets.

@robertoandrade
Created May 18, 2015 19:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robertoandrade/944b509a6c5265330a57 to your computer and use it in GitHub Desktop.
Save robertoandrade/944b509a6c5265330a57 to your computer and use it in GitHub Desktop.
Maven Output Coloring

Just add to your .bashrc or .bash_profile as:

source ~/bin/mvn-color.sh
#!/usr/bin/env bash
# Formatting constants
export BOLD=`tput bold`
export UNDERLINE_ON=`tput smul`
export UNDERLINE_OFF=`tput rmul`
export TEXT_BLACK=`tput setaf 0`
export TEXT_RED=`tput setaf 1`
export TEXT_GREEN=`tput setaf 2`
export TEXT_YELLOW=`tput setaf 3`
export TEXT_BLUE=`tput setaf 4`
export TEXT_MAGENTA=`tput setaf 5`
export TEXT_CYAN=`tput setaf 6`
export TEXT_WHITE=`tput setaf 7`
export BACKGROUND_BLACK=`tput setab 0`
export BACKGROUND_RED=`tput setab 1`
export BACKGROUND_GREEN=`tput setab 2`
export BACKGROUND_YELLOW=`tput setab 3`
export BACKGROUND_BLUE=`tput setab 4`
export BACKGROUND_MAGENTA=`tput setab 5`
export BACKGROUND_CYAN=`tput setab 6`
export BACKGROUND_WHITE=`tput setab 7`
export RESET_FORMATTING=`tput sgr0`
export EXCLUDING_FORMATTED="/^"$'\E'"\[([0-9]{1,2}(;[0-9]{1,2})*)?m/!"
export INFO_DIVIDER="s/(\[INFO *\]\ [-<>=].*|[-<>=]{3,})/${TEXT_BLUE}${BOLD}\1${RESET_FORMATTING}/g"
export INFO_BRACKET="s/(\[INFO *\]\ .*)([[{].*[]}]|[[{]$)/\1${RESET_FORMATTING}${BOLD}\2${RESET_FORMATTING}/g"
export INFO_EXECUTION="s/(\[INFO *\]\ [-<>=]*\ )([^:\ ]*)(:[0-9.]*)(-SNAPSHOT)?(:[^\ ]*\ )(\(.*\)\ )*([@])*(\ [^\ ][^\ ]*)*(\ [-<>=]*)/${TEXT_BLUE}${BOLD}\1${RESET_FORMATTING}${TEXT_YELLOW}${BOLD}\2${RESET_FORMATTING}${TEXT_WHITE}${BOLD}\3\4${RESET_FORMATTING}${TEXT_CYAN}${BOLD}\5${RESET_FORMATTING}${TEXT_CYAN}\6${RESET_FORMATTING}${TEXT_YELLOW}\7${RESET_FORMATTING}${TEXT_BLUE}${BOLD}\8${RESET_FORMATTING}/g"
export INFO_SUCCESS="s/(\[INFO *\]\ BUILD SUCCESS)/${BOLD}${TEXT_GREEN}\1${RESET_FORMATTING}/g"
export INFO_FAILURE="s/(\[INFO *\]\ BUILD FAILURE)/${BOLD}${TEXT_RED}\1${RESET_FORMATTING}/g"
export INFO_DEPENDENCY_TREE="s/(\[INFO *\]\ [\|\+\ \\\-]*[\\w\ -]*)([^:\ ]*):([^:\ ]*):([^0-9]*)*(:[^:]*[0-9][^:]*):*([^:]*)*/${TEXT_BLACK}${BOLD}\1${RESET_FORMATTING}${TEXT_YELLOW}\2${RESET_FORMATTING} : ${TEXT_YELLOW}${BOLD}\3${RESET_FORMATTING} : \4${RESET_FORMATTING} : ${TEXT_WHITE}${BOLD}v\5${RESET_FORMATTING} : ${TEXT_BLUE}${BOLD}\6${RESET_FORMATTING}/g"
export INFO_DEPENDENCY_MENTION="${EXCLUDING_FORMATTED} s/(\[INFO *\]\ .*\ )([^:]*:)?([^:]*:)?([0-9\.]*)(.*)*/${TEXT_BLACK}${BOLD}\1${RESET_FORMATTING}${TEXT_YELLOW}\2${RESET_FORMATTING}${TEXT_YELLOW}${BOLD}\3${RESET_FORMATTING}${TEXT_WHITE}${BOLD}\4${RESET_FORMATTING}${TEXT_BLACK}${BOLD}\5/g"
export WARNING_BRACKET="s/(\[WARNING\].*)/${TEXT_YELLOW}\1${RESET_FORMATTING}/g"
export WARNING_LOWER="s/(\[warn *\].*|\[WARN *\].*)/${TEXT_YELLOW}\1${RESET_FORMATTING}/g"
export WARNING_MSG="s/(\[INFO *\]\ WARNING:.*)/${TEXT_YELLOW}\1${RESET_FORMATTING}/g"
export ERROR_MSG="s/(\[ERROR *\].*)/${BOLD}${TEXT_RED}\1${RESET_FORMATTING}/g"
export PATH_PACKAGE="s/([^,\ :]*[/.][^,\ :][^,\ ]*)/${BOLD}${TEXT_WHITE}\1${RESET_FORMATTING}/g"
export TEST_RESULTS="s/Tests run: ([^,]*), Failures: ([^,]*), Errors: ([^,]*), Skipped: ([^,]*)/${BOLD}${TEXT_GREEN}Tests run: \1${RESET_FORMATTING}, Failures: ${BOLD}${TEXT_RED}\2${RESET_FORMATTING}, Errors: ${BOLD}${TEXT_RED}\3${RESET_FORMATTING}, Skipped: ${BOLD}${TEXT_YELLOW}\4${RESET_FORMATTING}/g"
export NO_TAG="${EXCLUDING_FORMATTED} s/^([^[])/${RESET_FORMATTING}\1/g"
# Wrapper function for Maven's mvn command.
mvn-color()
{
# Filter mvn output using sed
LANG=C
mvn $@ | sed -E \
-e "${INFO_DIVIDER}" \
-e "${INFO_BRACKET}" \
-e "${INFO_EXECUTION}" \
-e "${INFO_SUCCESS}" \
-e "${INFO_FAILURE}" \
-e "${PATH_PACKAGE}" \
-e "${INFO_DEPENDENCY_TREE}" \
-e "${INFO_DEPENDENCY_MENTION}" \
-e "${WARNING_BRACKET}" \
-e "${WARNING_LOWER}" \
-e "${WARNING_MSG}" \
-e "${ERROR_MSG}" \
-e "${TEST_RESULTS}" \
-e "${NO_TAG}"
# Make sure formatting is reset
echo -ne ${RESET_FORMATTING}
}
mvn-nocolor()
{
mvn $@
}
# Override the mvn command with the colorized one.
alias mvn="mvn-color"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment