Etant actuellement en train de migrer mon application sur Gradle, j’ai cherché à lui faire faire quelque chose d’assez classique pour un projet web : je voulais qu’il :
- concatène, minifie et compresse les fichiers JS
- transpile les fichiers LESS en CSS
- concatène, minifie et compresse les fichiers CSS
- zippe toutes les ressources (HTML inclus)
- pousser le ZIP sur mon repository maven
- faire passer
Après deux jours infructueux à essayer de configurer les plugins gradle pour faire tout ca (mon inexpérience de Gradle n’aidant pas), j’ai décidé de faire autrement : instrumenter Grunt avec Gradle pour qu’il fasse toutes les opérations sur les resources web, et ensuite utiliser son résultat pour créer mon ZIP.
Voilà le résultat :
Configuration de Grunt
La configuration de Grunt s’est fait automatiquement par Yeoman, sans autre manipulation.
Intégration de Grunt et Gradle
Il existe un plugin Gradle permettant le lancer des commandes Grunt. Pour l’installer il suffit d’ajouter ceci au fichier de configuration Gradle :
buildscript {
dependencies {
classpath 'com.moowork.gradle:gradle-grunt-plugin:0.5'
classpath 'com.moowork.gradle:gradle-node-plugin:0.4'
}
}
apply plugin: 'grunt'
apply plugin: 'node'
node {
version = '0.10.22'
download = true
}
grunt_build.dependsOn 'installGrunt'
grunt_build.dependsOn 'npmInstall'
Le plugin Grunt peut être lancé avec la tâche « grunt_build »
Le plugin Node est utilisé pour pouvoir télécharger Node lorsque l’application est buildé sur un serveur d’intégration continue (Jenkins dans mon cas), tout comme les tâches installGrunt et npmInstall déclenchées avant le build.
ZIP du projet et intégration à la phase de build
Créer une tâche pour zipper est très facile, il suffit de donner le type « Zip » à la tâche et de donner quelques éléments de configuration.
task webZip(type: Zip, dependsOn: ['grunt_build']) {
from 'dist'
destinationDir file('build/distributions')
}
Ici on fait dépendre la tâche de « grunt_build », il n’y a donc plus qu’à lancer une seule tâche pour tout construire, et on zippe le contenu du répertoire dist, qui est le répertoire où Grunt compile toutes ses ressources.
Livraison du ZIP dans Nexus
Pour livrer le ZIP, il faut utiliser le plugin maven, et faire quelques manipulations pour pouvoir simuler partiellement le plugin Java.
apply plugin: 'maven'
version='ma_version-SNAPSHOT'
task build(dependsOn: ['webZip']) << {
}
configurations {
archives
}
artifacts {
archives webZip
}
uploadArchives {
repositories {
repository(url: 'http://mon_repository_release') {
authentication(userName: 'monUser', password: 'monPass');
}
snapshotRepository(url: 'http://mon_repository_snapshot') {
authentication(userName: 'monUser', password: 'monPass');
}
mavenDeployer {
pom.project {
name 'monApp'
artifactId = 'monApp'
packaging 'zip'
description 'Le ZIP de mon application'
}
}
}
}
La tâche build est créée pour pouvoir exécuter le build de l’application avec le build des autres modules de mon project.
Ensuite on déclare le ZIP généré par la tâche « webZip » comme artifact du projet, et enfin on déclare les repositories et le POM du projet.
Maintenant, il suffit de lancer la tâche « build » pour :
- Lancer Grunt
- Zipper le résultat
- et l’envoyer sur le repository maven
Laisser un commentaire