Introduction d'un mécanisme d'héritage de méta donnée
Apache IvyDE
Beet ( http://beet.sourceforge.net/ )
Utilisation d'EasyAnt en tant que build-system
1/2
Prochaines versions
Abstraction de langage pour les plugins (XML, Java, Groovy?)
Simplifier le développement de plugin
Gestion de projet eclipse
Gestion de projet android
EasyAnt4e
Hudson
1/2
EasyAnt4e : intégration dans eclipse
Création / import de nouveau projet EasyAnt
Completion de code :
Les tags du descripteur de modules
Les plugins
Property
Classpath dynamique
Visualisation / Execution des targets
1/2
GRADLE
Builders Battle
Gradle en quelque mots
Système de build complet et flexible à la Ant
Utilisation des conventions de Maven à la demande
Une gestion multi projet avancée
Utilisation de Apache Ivy comme gestionnaire de
dépendances
Utilisation par API
Support et Insertion totale dans une infrastructure
Maven et Ivy existante
Chaîne de build en Groovy
Modèle de description du build très riche
Architecture CORE UI DOCS OPEN-API WRAPPER api project-reports code-quality groovy java maven osgi war jetty scala eclipse plugins build tools Ant Ivy Maven Ant Tasks checkstyle codeNarc webdav other dependencies librairies tierces Gradle Groovy
Notion de tâche
Un script de build Gradle est défini par un ensemble de tâches sur lesquelle est ajouté des actions qui sont des closures Groovy
<!-- build.gradle --> task distribution <<{ println "Distribution" } task release ( dependsOn : 'distribution')<<{ println "Release" } > gradle distribution Distribution > gradle release Distribution Release Tâche simple Accès à l'API Java
Les tâches ont une API Copy myCopy = task (myCopy, type:Copy ) myCopy .from (file('resources')) myCopy .into (file('target')) myCopy .include ('**/*.txt', '**/*.xml') task mycopy ( type:Copy ) mycopy{ description ='Copies the resources dir' from (file('resources')) into (file('target')) include ('**/*.txt', '**/*.xml') } task mycopy ( type:Copy ){ description ='Copies the resources dir' from (file('resources')) into (file('target')) include ('**/*.txt', '**/*.xml') } Tâche améliorée CustomTask Copy mycopy
Une API très riche task source( type:Jar ){ baseName='source' from sourceSets.main.java } task distrib( type:Zip ){ dependsOn(jar) baseName='dist' from sourceSets.main.java from jar.archivePath } CustomTask Abstract ArchiveTask Zip Jar War Tar SourceTask task javadoc( type: Javadoc ) { source sourceSets.main.allJava } Javadoc
Exécution unique et ordonnée compile compileTest test dist > ant test dist compile compileTest test compile compileTest test dist > gradle test dist :compile :compileTest :test :dist
Pour un projet Java/JEE CORE UI DOCS OPEN-API WRAPPER api project-reports code-quality groovy java maven osgi war jetty scala eclipse plugins build tools Ant Ivy Maven Ant Tasks checkstyle codeNarc webdav other dependencies librairies tierces Gradle Groovy
Build d'une librairie <!-- build.gradle --> usePlugin 'java' archivesBaseName = 'core' version = '3.5' manifest.mainAttributes ( 'Implementation-Version': version ) repositories { mavenCentral() } dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' } > gradle compileJava > gradle jar core-3.5.jar Gradle jar Configuration accessible sous forme de propriétés
dependencies { runtime module("commons-lang:commons-lang:2.4") { dependency("commons-io:commons-io:1.2") } } Dépendances transitives sans XML
Gradle et Ant: dans les deux sens (1/2) <!-- build.xml --> <property name="src.dir" value ="src" > <target name="compile" > <echo message="Compile,from Ant"/> </target> <!-- build.gradle --> ant.importBuild 'build.xml' //Complément de la tâche compile compile << { println "Added compiling from Gradle" println "SourceDir: ${ant.properties['src.dir']}" } > gradle compile :compile [ant:echo] Compile, from Ant Added compiling from Gradle SourceDir: src
Gradle et Ant: dans les deux sens (2/2) <!-- build.xml --> <target name=" deploy " depends="assemble" > <echo message="Deploy, from Ant"/> </target> <!-- build.gradle --> task assemble ( dependsOn: 'compile' ) << { println 'Assemble, from Gradle' } > gradle deploy :compile [ant:echo] Compile, from Ant Added compiling from Gradle :assemble Assemble, from Gradle :deploy [ant:echo] Deploy, from Ant
Gestion multi projet très avancée CORE UI DOCS OPEN-API WRAPPER api project-reports code-quality groovy java maven osgi war jetty scala eclipse plugins build tools Ant Ivy Maven Ant Tasks checkstyle codeNarc webdav other dependencies librairies tierces Gradle Groovy
Gestion multi projet (1/3)
Les descripteurs dans les sous modules sont optionnels
Injection de configuration
Possibilité de mettre toute la logique de build dans le parent
<!-- Structure de répertoires --> + build.gradle + settings.gradle +common/ +pz/ + build.gradle -biz/ - biz-auth/ common biz-auth pz depends depends war war jar <!-- settings.gradle --> include "common", "pz", "biz:auth"
Gestion multi projet (3/3) /web> gradle compileJava :common:compileJava :common:processResources :common:classes :common:jar :common:uploadDefaultInternal :pz:compileJava :biz:biz-auth:compileJava /web/biz/biz-auth> gradle compileJava :common:compileJava :common:processResources :common:classes :common:jar :common:uploadDefaultInternal :biz:biz-auth:compileJava /web/biz/biz-auth> gradle compileJava -a :biz:biz-auth:compileJava Compilation des projets dépendants Utilisation des jars dans le cache
Gradle GUI
Lancé par
> gradle –gui
Exécution de tâches
Paramétrage du niveau de log
Publie dans une infra Maven et Ivy CORE UI DOCS OPEN-API WRAPPER api project-reports code-quality groovy java maven osgi war jetty scala eclipse plugins build tools Ant Ivy Maven Ant Tasks checkstyle codeNarc webdav other dependencies librairies tierces Gradle Groovy
Publication dans des repo Ivy usePlugin 'java' version='1.0' uploadArchives{ repositories{ flatDir( dirs:'destRepo') } } IVY API Gradle Repository Ivy Artifacts + meta Ivy > gradle uploadArchives upload Archives
Publication dans des repo Maven usePlugin 'java' usePlugin 'maven' group= 'org.jug.normandyjug' archivesBaseName= 'artefact-ex' version='1.0-SNAPSHOT' uploadArchives { repositories .mavenDeployer { snapshotRepository (url: "http://serveur/archiva/repository/snapshots") } > gradle install > gradle uploadArchives Repository Maven loca l Repository Maven distant Maven Ant Tasks Gradle Artifacts + meta Maven Artifacts + meta Maven install upload Archives
Production de plusieurs artefacts
Une librairie/module peut avoir plusieurs artefacts
0 comments
Post a comment