Un plugin Maven pour exécuter les tests unitaires à chaque changement et recompiler les classes aussi. Cela permet à Maven de rattraper un peu Gradle sur ce sujet et de proposer ce qu'il est possible de faire en JS.
Je ne suis pas une grande fana de Gradle (je n'aime pas avoir du code dans ma configuration de build, parce que cela transforme ma configuration tout bête et déclarative, en un script avec du code potentiellement très compliqué dedans).
Apache Buildr reprend les bonnes pratiques de Maven c'est-à-dire :
- Séparer la partie du build qui exécute quelque chose (les plugins)
- De la partie qui dit quoi exécuter et quand (le pom.xml)
L'autre bénéfice, c'est que cela vous pousse à simplifier votre processus de build plutôt que de couvrir votre dette technique avec un script Groovy/Gradle par-dessus : on ne résout pas un problème d'organisation avec du code, il faut être soit débile (cf. écrits de Deleuze) soit un gros nerd à moitié taré pour penser ça car ce faisant on ne remonte pas à la root cause du problème. #MonPointDeVue #SiTuTeSensViséTesKunKon.
Gradle promeut cette croyance de noob qui dit que fusionner la préoccupation de workflow de build avec la préoccupation d'exécution (c'est-à-dire avec du code, avec des if-then-else, while-for, throw-catch...) c'est jeun's, cool, rebelle et vachement-plus-rapide-nempêche. Or si vous m'avez suivi jusque-là, vous comprenez en quoi il est essentiel de séparer ces préoccupations !
C'est pour cela que Maven force les gens à développer des plugins, pour que ce travers de tout mélanger par fainéantise ne vous gagne pas. Une dette technique impardonnable en Java depuis 2010, c'est bien celle qui se situe au niveau du build, alors en 2016, c'est juste une honte.
Un tuto pour Chlouchoutte sur les tests d'intégration avec Maven
Copier-coller les lignes suivantes à la fin de votre fichier .bashrc pour colorier les mots clefs (info, warning, error) et les résultats de l'exécution de Maven.
ADD MAVEN COLORATION :
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
Wrapper function for Maven's mvn command.
mvn_color() {
Filter mvn output using sed
mvn $@ | sed -e "s/\(\[INFO\]\)\(\ BUILD\ SUCCESS\)/${TEXT_BLUE}${BOLD}\1${TEXT_GREEN}\2${RESET_FORMATTING}/g" \
-e "s/\(\[INFO\]\)\(.*\)/${TEXT_BLUE}${BOLD}\1${TEXT_WHITE}\2/g" \
-e "s/\(\[WARNING\]\)\(.*\)/${BOLD}${TEXT_YELLOW}\1${TEXT_WHITE}\2${RESET_FORMATTING}/g" \
-e "s/\(\[ERROR\]\)\(.*\)/${BOLD}${TEXT_RED}\1${TEXT_WHITE}\2${RESET_FORMATTING}/g" \
-e "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"
Make sure formatting is reset
echo -ne ${RESET_FORMATTING}
}
Override the mvn command with the colorized one.
alias mvn="mvn_color"
Vous travaillez avec Maven depuis une connexion de merde. Ce dernier tente de télécharger 5 ou 6 artifacts de plusieurs méga en parallèle alors que votre vitesse de connexion n'excède pas les 16 Ko / sec (saloperie de H+ Free Mobile... Je dis ça, je ne dis rien mais on dirait du Edge). Bref, il serait plus rentable pour vous de télécharger les artifacts l'un après l'autre, d'autant que si votre connexion plante, vous avez plus de change de posséder un artifact en version complète dans votre répo local. Du coup voici la commande magique à fournir à Maven pour le forcer à s'exécuter en mode mono-thread et donc "no parallel downloads" :
mvn -Dmaven.artifact.threads=1 clean install
Comment booster un peu les temps de build de notre Maven
Vous utilisez NetBeans, IntelliJ ou Eclipse > 4.5, alors en deux commandes Maven votre IDE pourra intégrer la doc (javadoc) et les sources (pour le mode debug). Cd que Maven va faire c'est de récupérer pour chacune des dépendances les jar des sources et de la JavaDoc si ceux-ci sont disponibles.
mvn dependency:sources
mvn dependency:resolve -Dclassifier=javadoc
Edit : un outil que j'ai appelé mvndoc
.
Lancer un mode debug depuis NetBeans vers un Tomcat distant
Ou plus simplement, si vous utilisez le plugin maven-tomcat plugin et que vous lancez votre serveur Tomcat via une commande du type : "mvn initialize tomcat:run" vous pouvez faire ceci :
1) Remplacez celle-ci par "mvnDebug initialize tomcat:run"
2) Dans NetbBeans aller dans "Debug > Attach Debugger... > Java Debugger (JPDA) > SocketAttach"
Si vous configurer Surefire avec certaines options, il ne vous sera plus possible de produire des rapports avec JaCoCo (le fichier jacoco.exec dédié à l'agent JaCoCo ne sera plus produit).
Ce poste explique comment résoudre le problème en remplaçant les configurations de Surefire
et
Créer son propre "packaging type" pour Maven.