Dans un répertoire Maven v2 les fichiers JAR ont l'intégrité contrôlée par des fichiers contenant des sommes MD5 et SHA1. En général ces fichiers auxiliaires sont appelés comme le nom du fichier JAR accompagnés des extensions ".md5" ou ".sha1". Par exemple, pour la librairie "jcommon-0.9.6.jar" il doit exister "jcommon-0.9.6.jar.md5" et "jcommon-0.9.6.jar.sha1".
Ces ".md5" et ".sha1" ne sont que des fichiers texte avec une chaîne string correspondant à la somme de contrôle calculée à partir de l'archive. Cette somme représente une signature unique pour chaque fichier et peut garantir qu'il ne soit pas craqué ou corrompu.
Pour générer ces fichiers au moment de la livraison d'une librairie Java, ils existent des plugins Maven pour les créer automatiquement. Néanmoins, on peut avoir le cas où des librairies JAR n'aient pas ses fichiers de contrôle (par exemple, si on a créé cette partie du répo manuellement). Cette façon, lors d'une résolution de dépendance au Maven, on va avoir des notifications telles qu'au-dessous :
[WARNING] *** CHECKSUM FAILED - Checksum failed on download
Pour illustrer ce soucis, voici un exemple d'un arbre partiel au Maven :
|-- jfree-former | |-- jcommon | | `-- 0.9.6 | | |-- jcommon-0.9.6.jar | | `-- jcommon-0.9.6.pom | `-- jfreechart | `-- 0.9.21 | |-- jfreechart-0.9.21.jar | `-- jfreechart-0.9.21.pom
Il faut d'abord créer un script Shell appelée checksum.sh avec le contenu ci-dessous :
#!/bin/bash if [ $# -ne 2 ] then echo "Usage : checksum [md5|sha1] <file-name>" echo "Sample: checksum sha1 /tmp/dir/myfile.jar" exit 1 fi format=$1 file="$2" if [ ! -f $file ] then echo "File not found: $file" exit 2 fi if [ "$format" == "md5" -o "$format" == "sha1" ] then ${format}sum "$file" | cut -d' ' -f1 | tr -d "\n" > "$file.$format" else echo "Please choose a format: md5 or sha1" exit 2 fi echo "Created checksum file $file.$format"
Ensuite, on doit créer un autre script nommé generate-checksums.sh contenant ces lignes :
#!/bin/bash EXTENSIONS="jar pom" ALGORITHMS="sha1 md5" PROGDIR=`dirname $0` export PATH="$PATH:$PROGDIR" for ext in $EXTENSIONS do for alg in $ALGORITHMS do find -type f -name "*.$ext" -exec checksum.sh $alg {} \; done done
N'oubliez pas de donner des permissions d'exécution à ses fichiers .sh, en roulant le commande chmod +x *.sh.
Maintenant, il faut seulement aller au répertoire désiré et ensuite exécuter le script generate-checksums.sh. Voyez :
$ cd /var/maven/repo/ $ /home/user/scripts/generate-checksums.sh Created checksum file ./jfree-former/jcommon/0.9.6/jcommon-0.9.6.jar.sha1 Created checksum file ./jfree-former/jfreechart/0.9.21/jfreechart-0.9.21.jar.sha1 Created checksum file ./jfree-former/jcommon/0.9.6/jcommon-0.9.6.jar.md5 Created checksum file ./jfree-former/jfreechart/0.9.21/jfreechart-0.9.21.jar.md5 Created checksum file ./jfree-former/jcommon/0.9.6/jcommon-0.9.6.pom.sha1 Created checksum file ./jfree-former/jfreechart/0.9.21/jfreechart-0.9.21.pom.sha1 Created checksum file ./jfree-former/jcommon/0.9.6/jcommon-0.9.6.pom.md5 Created checksum file ./jfree-former/jfreechart/0.9.21/jfreechart-0.9.21.pom.md5
Et voici le résultat pour le cas d'exemple :
|-- jfree-former | |-- jcommon | | `-- 0.9.6 | | |-- jcommon-0.9.6.jar | | |-- jcommon-0.9.6.jar.md5 | | |-- jcommon-0.9.6.jar.sha1 | | |-- jcommon-0.9.6.pom | | |-- jcommon-0.9.6.pom.md5 | | `-- jcommon-0.9.6.pom.sha1 | `-- jfreechart | `-- 0.9.21 | |-- jfreechart-0.9.21.jar | |-- jfreechart-0.9.21.jar.md5 | |-- jfreechart-0.9.21.jar.sha1 | |-- jfreechart-0.9.21.pom | |-- jfreechart-0.9.21.pom.md5 | `-- jfreechart-0.9.21.pom.sha1
Voilà ! Désormais votre répertoire Maven contient des informations de vérification pour les fichiers et la résolution de dépendances ne lancera plus le message "CHECKSUM FAILED".
Si vous voulez, le code source complet peut être obtenu dans cette adresse : https://gitorious.org/shell-scripts/checksum