LES TONTONSFLEXEURS
LES TONTONSFLEXEURS Engagez vous qu ils disaient http://groups.adobe.com/group/504
LES TONTONSFLEXEURS Et choisissez le menu de notre prochain rendez-vous Workflow Designer Flash <-> Développeur Flex Remoting et Messaging, avec BlazeDS et LCDS Découverte de Catalyst Flex 4 : Data Centric Developpement Test Driven Developpement et FlexUnit IHM et Ergonomie, les fondamentaux API 3D et Moteur 3D Développement pour Mobiles
LES NEWS
LES NEWS Adobe abandonne Linux!
LES NEWS Alternatives : FDT http://fdt.powerflasher.com/ IntelliJ IDEA http://www.jetbrains.com/idea
LES NEWS PrimeSense : Kinect pour flash http://www.primesense.com/?p=515
LES NEWS Marilena : version AS3 d OpenCV Facial Detection, Web Cam Object Detection, Head Tracking, 3D Library Integration
LES NEWS http://ffdmag.com
MAX 2010
MAX 2010 Ce que Adobe prépare - Flex 4.5 «Hero» - Flash Builder «Burrito» - Flash Catalyst «Panini» - Flash player 11 - Rome
MAX 2010
LES TONTONSFLEXEURS Maven
Historique Les prémices La fondation apache cherche un moyen d uniformiser les «systèmes de build» Ils réalisent les constats suivants : Systèmes spécifiques à chaque projet Réutilisabilité relative Complexité Coûts de mise en place, maintenance et montée en compétences (dupliqué pour chaque projet) Besoins similaires : compilation, documentation, génération d un site
Historique Maven 1 Maven 1 est très vite adopté : Basé sur Ant, outil alors largement utilisé Apparaît tout d abord comme un complément de Ant Il est bien plus, en répondant aux problématiques de : maintenabilité réutilisabilité uniformisation
Il présente déjà les grands principes qui en feront son succès : Une approche déclarative basée sur un langage projet commun Les grands principes La manipulation abstraite de concepts auxquels nous sommes tous familiers : compilation test packaging déploiement reporting Concepts intégrés via la notion de cycle de vie
Les grands principes Les grandes fonctionnalités : La définition d un cycle de vie La gestion des dépendances La gestion de version La documentation Une arborescence de projet standard
Les grands principes Maven 1 comporte encore quelques inconvénients La taille du project.xml qui inclue l ensemble des dépendances nécessaires au projet (dépendances + plugins) l ensemble des versions déployées Langage de script encore nécessaire Les plugins maven développés en scripts Jelly Les exécutions annexes, gérées en partie via des plugins, en partie au sein de l installation
Les grands principes, Maven 2 Maven 2 vient compenser ces manques : Approche 100% déclarative via le fichier pom.xml La gestion transitive des dépendances Les plugins full Java tous gérés via le repository
Les grands principes, pom.xml Le pom.xml rassemble : La liste des membre de l équipe L url du gestionnaire de sources La version Le type d artifact Les rapports à générer Les principales dépendances nécessaires suivant les différentes phases : compilation, packaging, test La déclaration des plugins et de leur configuration
pom : Il s agit du fichier pom.xml contenant l intégralité de la configuration maven pour le projet artifact : Définitions Il s agit du résultat final du build projet Il sera déployé sur le repository sous la forme : <artifactid>-<version>.<extension> groupid : Il s agit du répertoire dans lequel sera déployé l artifact sur le repository Il permet de catégorisés les artifacts Il s apparente à la notion de package en Java
Définitions repository : Il contient les dépendances et plugins nécessaires au build Il peut contenir également les artifacts déployés Selon le cas, il peut être local ou distant Selon la configuration il peut contenir des artifacts en version release et/ou snapshot snapshot : Mot réservé maven, qui vient en complément de la version Un projet en version snapshot signifie qu il est en cours de développement Un snapshot est déployé avec un indicatif de date en plus du numéro de version Lorsqu un projet contient une dépendance snapshot, maven vérifiera la disponibilité d une version à chaque build
Définitions plugin : Il s agit de la base même du fonctionnement de maven Un plugin rassemble un ou plusieurs goals Il peut être associé à une phase du cycle de vie ou exécuté en ligne de commande : $ mvn plugin-id:goal L exécution d un plugin peut être configurée : Via le pom En ajoutant des arguments à la ligne de commande goal : Tâche unitaire spécifique
Structure des répertoires Arborescence proposée par défaut Minimum de configuration Uniformisation des projets Diminution des coûts Possibilité de définir une arborescence différente
Structure des répertoires src src/main/java src/main/resources src/main/filters src/main/webapp src/test/java src/test/resources src/site target target/classes target/test-classes target/surefire-report target/site Répertoire contenant toutes les entrées nécessaires à la compilation, les tests, la documentation Sources java uniquement Fichiers à inclure au classpath (exemple : hbm.xml, properties, xml ) Les fichiers properties servant de filtre. Dans le cadre d une application web, ce répertoire contient l ensemble des ressources web : jsp, html, css, images, répertoire WEB-INF Sources java des tests unitaires. Pattern des classes exécutées : *Test, Test*, *TestCase Pattern des classes ignorées pour l exécution : Abstract*Test, Abstract*TestCase Fichiers inclus au classpath de test. Fichiers venant en complément pour la génération du site. Répertoire temporaire contenant l ensemble des ressources générées (fichiers compilés, filtrés, rapports générés, artifact ) Répertoire de compilation principal. Répertoire de compilation des tests unitaires. Répertoire contenant les rapports de tests unitaires Site généré
Cycle de vie : default mvn compile process-resources compile resources:resources compiler:compile process-test-resources compiler:testresources mvn test test-compile test compiler:testcompile surefire:test mvn install mvn deploy package install deploy jar:jar install:install deploy:deploy
La gestion des dépendances L inlassable sacer d os des développeurs Où les trouver? Comment les stocker? Comment les partager? Comment les nommer? Comment gérer les versions? Comment gérer leur implication : classpath, classpath de test, packagée ou non
La gestion des dépendances Maven répond à la totalité de ces problématiques Stockage, Partage REPOSITORY Norme de nommage Référencement, Classification Gestion des versions Niveau d implication POM Cohérence des versions
La gestion des dépendances Une dépendance est identifiée par Un répertoire de classification (groupid) Un nom (artifactid) Un numéro de version Une extension (type) <dependencies> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-core</artifactid> <version>2.5.6</version> </dependency> </dependencies>
Le repository Central au fonctionnement de maven : Téléchargement et référencement des dépendances Déploiement des artifacts générés Déploiement des sites projets générés Téléchargement et stockage des plugins exécutés
Les repositories Dépendances et plugins (internes et externes) Repository entreprise Dépendances et plugins internes Repository externe Poste développeur Repository local Dépendances et plugins externes
Repository : structure Structure maven 2
Les modules Un projet maven peut être découpé en différents modules : Souplesse Modularité Réutilisabilité Les modules sont listés dans un pom parent Ils référencent également le pom parent
Les modules <project> <groupid>org.ttfx.cave</groupid> <artifactid>cave-parent</artifactid> <version>1.0-snapshot</version> <packaging>pom</packaging> <modules> <module>cave-business</module> <module>cave-webapp</module> </modules> </project> <project> <parent> <groupid>org.ttfx.cave</groupid> <artifactid>cave-parent</artifactid> <version>1.0-snapshot</version> </parent> <project> <parent> <groupid>org.ttfx.cave</groupid> <artifactid>cave-parent</artifactid> <version>1.0-snapshot</version> </parent> <artifactid>cave-business</artifactid> <packaging>jar</packaging> </project> <artifactid>cave-webapp</artifactid> <packaging>war</packaging> </project>
L héritage Un pom hérite de la quasi-totalité de la configuration de son parent Il est possible de canaliser cet héritage dependencies / dependencymanagement plugins / pluginmanagement Le plugin help permet de contrôler les résultat de l application de l héritage sur le pom courant
Les plugins : configuration Chaque plugin possède un ou plusieurs goals ses propres paramètre de configuration Il existe 2 types de configuration bien distinctes Le customisation de l exécution attachée au cycle de vie La définition d une exécution en ligne de commande L ajout d une exécution au sein du cycle de vie projet <plugin> <executions> <execution> <id>dosomething</id> <configuration> </configuration> <phase>package</phase> <goals> <goal>goalid</goal> </goals> </execution> </executions> </plugin>
Les plugins help assembly antrun release scm changes archetype
Le site Suivi informel et qualitatif du projet Quelques rapports : Javadoc Surefire Dependencies Changelog Cobertura Checkstyle / PMD Findbugs Taglist
LES TONTONSFLEXEURS Flex et Maven Mise en place d un projet Flex avec Maven
Objectifs Créer un projet Flex avec Maven Intégration des tests unitaires Intégration continue avec Hudson Faire une «release» de l application
Pré-requis Une connexion internet Java version 1.5 Maven version 2
Création du projet (via archetype) Se placer dans le dossier où on veut créer le projet et lancer la ligne de commande : mvn archetype:generate -DarchetypeRepository=http:// repository.sonatype.com/content/groups/flexgroup -DarchetypeGroupId=org.sonatype.flexmojos -DarchetypeArtifactId=flexmojos-archetypes-application -DarchetypeVersion=3.7.1
Aperçu du projet Contenu du POM généré Structure du projet
Création du projet (via FlashBuilder) Evidemment possible depuis Flash Builder en faisant attention à : src/main/flex (dossier source par défaut) Créer et ajouter les dossiers suivants au Build Path: src/main/resources src/test/flex Déplacer l application principale dans src/main/flex et redéfinir l application principale Ajouter le POM qui va bien au projet Définir la version du SDK Flex à celle indiquée dans le POM
Compilation du projet Simplement lancer la commande : mvn clean install Téléchargement du SDK Flex Compilation de l application Compilation des Tests Exécution des tests Installation dans le repository
Support des tests unitaires Installer le Flash Player Debug Windows: http://download.macromedia.com/pub/flashplayer/updaters/10/flashplayer_10_sa_debug.exe OS X: http://download.macromedia.com/pub/flashplayer/updaters/10/flashplayer_10_sa_debug.app.zip Afficher le contenu du paquet et renommer «Contents/MacOS/Flash Player Debugger» en «Contents/MacOS/Flash Player» Linux: http://download.macromedia.com/pub/flashplayer/updaters/10/flash_player_10_linux_dev.tar.gz Décompresser l'exécutable dans «/usr/bin» Indiquer l emplacement du FlashPlayer En ajoutant à chaque exécution maven : -DflashPlayer.command=${filepath} Via la modification du PATH : Sous Mac OS X, ajouter au fichier.profile : export PATH=$PATH:/Users/mika/mavenFlex/Flash\ Player\ Debugger.app/Contents/ MacOS/
Changement de la version du SDK Flex Edition des «dependencies» du POM Changement du numéro de version dans la dependency : com.adobe.flex.framework.flex-framework Liste des versions disponibles avec FlexMojos : https://repository.sonatype.org/content/groups/flexgroup/com/adobe/flex/framework/flexframework/ Modification de la version du compilateur utilisée
Import dans Flash Builder Configurer le projet pour Flash/Flex Builder : mvn flexmojos:flexbuilder pour Flex Builder mvn flexmojos:flashbuilder pour Flash Builder Importer le projet existant dans Flash/Flex Builder Menu Fichier > Importer > Projet existant Configurer le projet pour utiliser le wrapper HTML Propriétés du projet > Flex compiler > Generate HTMK wrapper file Attention : Il est préférable de disposer de la même version du SDK dans FlashBuilder que celle définie dans le POM!!! Liste des versions disponibles avec FlexMojos : https://repository.sonatype.org/content/groups/flexgroup/com/adobe/flex/framework/flex-framework
Et Flex 4?? Changer le numéro de version tout simplement! Cibler le player version 10: Ciblage du player 10 Ajout du SWC player 10
Création du POM parent Création d un POM parent pour notre application Définition une fois pour toute des versions utilisées Configuration par défaut des plugins Déclaration du ou des repositories à utiliser Création de projet facilité Exemples de POM parent offerts par les Tontons Flexeurs ;-) pour Flex 3.5 : pour Flex 4 :
Déclaration du projet parent Ajout du projet parent Suppression des versions/ configurations Attention le POM parent doit être redéployé dans le repository si changements! («mvn clean install» le redéploiera)
Attention! Ne pas commiter FlexUnitApplication.mxml pour les projets de lib swc maven ne le compilera pas -> Uniquement tests en local Ne pas commiter de TestCase sans méthode de test (le test ne passera pas dans maven) Ne pas commiter le dossier «target» En fait commiter uniquement «src» et «pom.xml» Ne pas mixer les versions de SDK - Ajouter seulement les dépendances dont vous avez besoin
Intégration continue du Projet Création du projet dans Hudson
Release du projet Indiquer les infos SCM (Source Code Management) mvn release:prepare préparation des poms tag SCM du projet compilation / vérification du projet
Release du projet Indiquer les infos de distribution mvn release:perform checkout du tag compilation et déploiement dans le repository modification des poms
Conclusion Maven un système de build : simple et efficace uniformisée et modulable Flex 4.5 pas encore «compatible»...
Références Site de référence http://maven.apache.org Maven Reference Guide http://www.sonatype.com/books/mvnref-book/reference/publicbook.html FlexMojos http://flexmojos.sonatype.org/ Hudson http://hudson-ci.org/ Nexus Reference Guide http://www.sonatype.com/books/nexus-book/reference/ Better Builds with Maven : Vincent Massol & Jason van Zyl Introduction à Maven 2 : http://dcabasson.developpez.com/articles/java/maven/introductionmaven2/ Working with Maven : http://cvs.peopleware.be/training/maven/maven2/ FAQ Maven 2 : http://java.developpez.com/faq/maven/ Maven, The Definitive Guide, en français: http://www.maven-definitive-guide.fr/ Maven Properties Guide : http://docs.codehaus.org/display/mavenuser/ MavenPropertiesGuide
LES TONTONSFLEXEURS Workflow Designer Flash <-> Développeur Flex Remoting et Messaging, avec BlazeDS et LCDS Découverte de Catalyst Flex 4 : Data Centric Developpement Test Driven Developpement et FlexUnit IHM et Ergonomie, les fondamentaux API 3D et Moteur 3D Développement pour Mobiles