Adosser un gestionnaire de repository Maven à Gradle
Gradle est un système de build innovant utilisant le langage dynamique Groovy pour décrire la chaîne de construction des applications, et le gestionnaire de dépendance Ivy pour gérer les librairies d’un projet.
Grâce à la richesse du contenu des repository Maven disponibles sur le marché, il est très pratique d’utiliser des repository Maven pour récupérer les librairies du projet. Pour agréger plusieurs repository Maven, vous avez besoin d’un gestionnaire de repository comme Archiva, Nexus ou même Artifactory. L’utilisation d’un tel outil permet de fournir des mécanismes de sécurité, de cache, une gestion centralisée des proxies et des fonctionnalités de recherche avancées.
L’exemple suivant (réalisé avec Gradle 0.5.2 et Archiva 1.1.3) fournit la configuration Gradle pour la récupération des librairies du projet à travers Archiva, puis la configuration pour le déploiement du livrable projet dans Archiva.
Récupération des dépendances
Il faut déclarer le point d’entrée de Archiva comme repository Maven dans lequel Gradle peut rechercher les artefacts.
-
archivaRespositoryRootURL=‘http://server:8090/archiva/repository’
-
repositoryGroupArchivaURL = “$archivaRespositoryRootURL/repository-group”
-
dependencies {
-
addMavenStyleRepo(‘archivaRepo’,repositoryGroupArchivaURL)
-
compile “commons-logging:commons-logging:1.0”, “log4j:log4j:1.2.14”
-
}
Déploiement du livrable projet dans Archiva
Pour uploader ses artefacts, Archiva utilise le protocole webdav. Dans un premier temps, il faut récupérer une implémentation webdav et l’ajouter à une configuration nommée « deployerJars ». Ensuite, les librairies de cette configuration seront utilisées dans le deployeur Maven.
-
snapshotsRepositoryArchivaURL= “$archivaRespositoryRootURL/snapshots”
-
repositoryArchivaURL= “$archivaRespositoryRootURL/internal”
-
dependencies {
-
addConfiguration(“deployerJars”)
-
deployerJars “org.apache.maven.wagon:wagon-webdav:1.0-beta-2@jar”
-
}
-
uploadLibs {
-
uploadResolvers.addMavenDeployer(‘maven-deployer’) {
-
addProtocolProviderJars(dependencies.resolve(‘deployerJars’))
-
snapshotRepository(url: snapshotsRepositoryArchivaURL)
-
repository(url: repositoryArchivaURL)
-
}
-
}
Exemple complet
-
group = ‘com.zenika.example’
-
usePlugin(‘war’)
-
targetCompatibility = ‘1.5’
-
sourceCompatibility = ‘1.5’
-
archivesBaseName=‘gradle-test’
-
archivaRespositoryRootURL=“http://server:8080/archiva/repository”
-
snapshotsRepositoryArchivaURL= “$archivaRespositoryRootURL/snapshots”
-
repositoryArchivaURL= “$archivaRespositoryRootURL/internal”
-
repositoryGroupArchivaURL = “$archivaRespositoryRootURL/repository-group”
-
version = null
-
createTask(‘init’, overwrite: true) {
-
if (build.taskGraph.hasTask(‘:release’)) {
-
version = ‘1.0’
-
} else {
-
version = ‘1.0-SNAPSHOT’
-
}
-
}
-
createTask(‘release’, dependsOn: ‘uploadLibs’) {
-
println ‘The product has been released’
-
}
-
dependencies {
-
addMavenStyleRepo(‘archivaRepo’,repositoryGroupArchivaURL)
-
compile “commons-logging:commons-logging:1.0”, “log4j:log4j:1.2.14”
-
addConfiguration(“deployerJars”)
-
deployerJars “org.apache.maven.wagon:wagon-webdav:1.0-beta-2@jar”
-
}
-
uploadLibs.doFirst{
-
if (build.taskGraph.hasTask(‘:release’)) {
-
println “Deployment into the internal repository $repositoryArchivaURL”
-
} else {
-
println “Deployment into the snapshots repository $snapshotsRepositoryArchivaURL”
-
}
-
}
-
uploadLibs {
-
uploadResolvers.addMavenDeployer(‘maven-deployer’) {
-
addProtocolProviderJars(dependencies.resolve(‘deployerJars’))
-
snapshotRepository(url: snapshotsRepositoryArchivaURL)
-
repository(url: repositoryArchivaURL)
-
}
-
}
L’invocation de la commande :
/var/local/test>gradle -q uploadLibs
déploie l’artefact produit par le projet dans l’espace “snapshots” de Archiva.
L’invocation de la commande :
/var/local/test>gradle -q release
déploie l’artefact produit par le projet dans l’espace “internal” de Archiva.
Pour conclure, cet exemple nous fournit une première brique démontrant la très grande facilité d’intégration de Gradle dans une infrastructure Maven existante.