dimanche 28 décembre 2008

Packager Hudson avec ses plugins en Gradle

Dans un précédent post, je spécifiais comment produire avec Maven, l'archive Web de Hudson incorporant un ensemble de plugins; voici son équivalent avec Gradle:

usePlugin('war')
group='org.jvnet.hudson'
version='1.266'
hudsonunpack= new File('build/hudson-unpack')
hudsonunpack.mkdirs()

boolean isPlugin(File dependency){
 if ((dependency.getName()!=null) && (dependency.getName().endsWith(".hpi"))){
  return true;
 }
 return false
}


List plugins = [
  'org.jvnet.hudson.plugins:doxygen:0.1@hpi',
  'org.jvnet.hudson.plugins:gradle:1.1@hpi',
  'org.jvnet.hudson.plugins:zentimestamp:1.0@hpi',
  'org.jvnet.hudson.plugins:clearcase:0.8.1@hpi'
]

List core = [
  'org.jvnet.hudson.main:hudson-war:'+version+'@war'
]

dependencies{
  addMavenRepo('http://download.java.net/maven/2')
  providedCompile core
  providedRuntime plugins
}

createTask('hudson-unpack'){
 dependencies.resolve("providedCompile").each{ depFile ->
  ant.unzip(src: depFile , dest:hudsonunpack)
 }
}

createTask('copy-plugins'){
 pluginsDir = new File(hudsonunpack,'WEB-INF/plugins')
 pluginsDir.mkdirs()
 dependencies.resolve("providedRuntime").each{ depFile ->
  if (isPlugin(depFile))
   ant.copy(file: depFile, todir: pluginsDir)
 }
}


task('hudson-unpack').execute()
task('copy-plugins').execute()


archive_war{
 baseName='hudson'
 manifest.mainAttributes(
  "Main-Class": "Main",
  "Version": version)
 fileSet(dir: hudsonunpack){
  exclude('**/HUDSON.RSA')
  exclude('**/HUDSON.SF')
 }
}

J'avoue que l’utilisation de Gradle dans cet exemple ne permet pas de montrer sa pleine puissance et ses apports en comparaison de Maven. Néanmoins, la première remarque est l'aisance de la spécification des éléments pour la création de l'archive Web. La deuxième remarque concerne l'utilisation des tâches Ant (ant.copy et ant.unzip) pour réaliser l'équivalent des goals "copy" et "unpack" du plugin maven "maven-dependency-plugin". C'est un peu dommage, et pour l'instant sur ce point, Maven est supérieur. Mais une issue Jira (GRADLE-337) a été soumise sur le projet Gradle. N'hésiter pas à voter pour cette issue.

Aucun commentaire: