Du développement à la livraison avec JavaFX et le JDK9
-
Upload
thierry-wasylczenko -
Category
Engineering
-
view
152 -
download
5
Transcript of Du développement à la livraison avec JavaFX et le JDK9
Thierry Wasylczenko
@twasyl
DU DÉVELOPPEMENTÀ LA LIVRAISON
avec JavaFX et le JDK 9
A PROPOS groupe Everial
Ingénieur R&DKnowings
@twasylSlideshowFXJStackFX
QUI?Fait du déploiement (continu) d'application web?Fait du déploiement (continu) d'application lourde?Sait ce qu'apporte le JDK9?A déjà testé le JDK9?
SOMMAIREJava 9JavaFX 9Construction continueLivraison continueConclusion
JAVA 9
MODULARISATIONJava 9 introduit Jigsaw, la mécanique de modularisation du
JDK.
Jigsaw est similaire sur bien des concepts à OSGi:
Notion de modules et non de bundlesExport de packagesUtilisation de packages
QU'EST CE QU'UN MODULE?Un module est une collection de packages
utilisésexportésouverts
Un module est décrit à l'aide du fichier module-info.java.
Un module peut être ouvert.
QU'EST CE QU'UN MODULE JAVA 9?module com.twasyl.slideshowfx {
requires javafx.controls;
exports com.twasyl.slideshowfx.utils to java.utils;
}
QU'EST CE QU'UN BUNDLE OSGI?Bundle-Name: My bundle
Bundle-Activator: com.twasyl.slideshowfx.utils.UtilsActivator
Export-Package: com.twasyl.slideshowfx.utils
Import-Package: org.osgi.framework, javafx.controls
Java 9 ce n'est pas que ça
TRY-WITH-RESOURCESAvant Java 9:
try(final ByteArrayOutputStream output = ...) { // ... } // J'ai besoin de output!!
TRY-WITH-RESOURCESDonc ...
ByteArrayOutputStream output = null; try(output = ...) { // ... } output.toByteArray();
TRY-WITH-RESOURCESAvec Java 9:
final ByteArrayOutputStream output = new ... try(output) { // ... } output.toByteArray();
MAIS AUSSIMéthodes privées pour les interfacesGarbage collector G1 activé par défautNouvelle API pour @DeprecatedNouvelles méthodes utilitaires pour les collections :{List | Set | Map }.of(...)
OU ENCOREUne nouvelle API pour parcourir les stacktracesSupport d'Unicode 8.0La généricité des enum
OU ENCOREUne meilleure gestion des chaînes de caractèresLa Javadoc se dote d'un champ de recherche !JShell est un REPL (Real Eval Print Loop) permettantd'exécuter du code Java sans avoir à écrire toute lasyntaxe du langage.
JAVAFX 9
GÉNÉRALITÉSLes nouveautés de JavaFX 9 se situent surtout sous le
chapeau :
Modularisation complète pour s'accorder avec JigsawAPI publique pour les skins des contrôlesSupport du HDPI pour LinuxGTK 3 pour LinuxMise à jour de WebKit
Cela vous parle?
JIGSAW (ENCORE)Jigsaw apporte une encapsulation forte:
Comment accéder aux champs privés annotés @FXML?Comment charger les ressources de son application:
Les *.fxml?Les images?Les feuilles de style…
@FXML - CONTROLLER
Quel est le problème?
public class MonController implements Initializable { @FXML private Button button; }
@FXML - MODULE-INFO.JAVAmodule com.twasyl.slideshowfx {
// ...
opens com.twasyl.slideshowfx.controllers to javafx.fxml;
}
CHARGEMENT DES RESSOURCESEst-ce que cela vous choque?
Ou?
ClassLoader.getResource(...);
scene.getStyleSheets().add("/com/twasyl/slideshowfx/css/Default.css");
CHARGEMENT DES RESSOURCESIl faudra faire comme cela :
Class.getResource(...);
FEUILLES DE STYLEAttention au @... dans les FXMLs
<BorderPane> <stylesheets> <URL value="@../css/default.css" /> </stylesheets> </BorderPane>
Démonstration
PACKAGINGPossible via:
javapackagerant
Support des applications modulairesTaille du package moins importanteTemps de chargement plus rapides
Démonstration
CONSTRUCTION CONTINUE
CE QUI EST NÉCESSAIRE?Un gestionnaire de sourceUn outil de construction
GESTIONNAIRE DE SOURCESToujours utiliser un gestionnaire de version des sources
(VCS) pour:
garder une trace des changementspartager son coderésoudre efficacement les conflits de modificationconcurrente
git
GITTirer parti du mécanisme de branchesMaîtriser les commandes essentielles :git commit --amendgit mergegit rebasegit pullgit push
GIT-FLOWUne branche master pour les releasesUne branche development pour les développementsdes versions futuresDes branches feature pour chacune des fonctionnalitésDes branches bugfix pour les bugsPour en savoir plus
GITHUBTirer parti de la fonctionnalité de releasesGestionnaires de ticketWikiIntégrés avec beaucoup de services de construction et delivraison continue
Construction
OUTIL DE CONSTRUCTIONIntéressant et utile pour :
exécuter les tests unitaire et d'intégrationgérer les dépendances du projetconstruire de manière aisée le livrable du projetgérer les modules Jigsaw
Ne sont pas prets
OUTILS DE CONSTRUCTIONgradle
Support limité de Java 9 et JigsawCompilation sans Jigsaw possible
mavenTravail en cours
LIVRAISON CONTINUE
ENJEUXLivraison continue Déploiement
continu
JAR JavaFX 1 WAR + n JARs
n plateformes clientes cibles 1 plateformeserveur cible
Hébergement des binaires pourtéléchargement
Serveur cible
TRAVIS CIConstruire un projet sur:
LinuxOS X
.travis.ymlSupporte git
APPVEYORConstruire un projet sur Windows
x86amd64
appveyor.ymlSupporte git
Démonstration
INCONVÉNIENTSLa version de Java peut être dépendante du service utiliséLa sauvegarde des artefacts produits n'est pas toujourspossibleTemps de construction limité
BINTRAYPermet pour les binaires de
les héberger par versionles télécharger
S'intègre avec gradlel'étape de construction permet donc l'upload
CONCLUSION
CONCLUSIONJigsaw (mais pas que)Axé performanceNouveaux composantsMise à jour
des IDEsdes outils
RESSOURCES, Jonathan Giles, Kevin
Rushforth - JavaOne 2016, Chris Bensen - JavaOne 2016
, Joe Darcy -JavaOne 2016
, Katharine
JavaFX: New and Noteworthy
Packaging Java ApplicationsJDK 9 Language, Tooling, and Library Features
How do you solve a problem like Java 9 modules andreflective access?JEPs
SOURCES DE LA DÉMONSTRATION
https://github.com/twasyl/So�Shake16
FAQ