Bonjour
J’ai fait un premier prototype de webApp java qui inclus le front fait avec Ext-JS le tout sous Maven.
Sencha fournit un outil pour faire le build d'une application Ext-JS.
C’est un outil puissant en ligne de commande. Il est plutôt bien fait.
Voir Sencha CMD sur le site de Sencha.
Mais il n'est pas du tout dans l'esprit de Maven.
Et il ne prévoit rien pour faire le build du backend qui va avec l'appli.
Ce n'est pas un reproche. ce n'est pas le but.
Cet outil offre une interface avec ANT.
Pour faire un build d'une WebApp Ant a prévu les tâches nécessaires depuis longtemps.
Lorsque le projet prend de l'ampleur, gérer les dépendances et tout le build devient complexe.
J'utilise pour ça Maven avec une forge qui gère en automatique les nightly builds.
Me restait à combiner Sencha cmd avec maven.
C’est donc chose en partie faite.
J'ai posté sur les forums de Sencha une solution pour lancer le build d'une application Ext-JS avec Maven.
Ce qui est une première étape.
Mais pour builder une webApp complète j'ai cherché à arranger la chose.
Le premier problème que j'ai rencontré avec Sencha (mais c'était pareil avec gulp grunt etc.)
Comment passer les propriétés du build Maven à l'outil de build du frontend*?
Le second problème (là aussi rencontré avec gulp grunt etc) c'est que le build du frontend mélange allègrement les fichiers source les fichiers de travail les fichiers générés.
Le troisième problème la présence de la Lib Ext-JS complète dans le dossier du frontend.
pour résoudre le premier point (j'avais fait pareil avec les autres outils)
j'ai placé les fichiers de travail du front dans un dossier ad hoc
Lors du build maven il y a plusieurs étapes la première valide de descripteur du projet.
la seconde est destinée à la génération de source (par exemple généré le source de classes java à partir d'une xsd)
J'ai utilisé cette phase pour créer un dossier workspace dans e dossier de builds de maven.
Puis copier tous les fichiers de travail en y injectant les propriétés maven.
Il y a dans le build Sencha un 10ene de fichiers qui contiennent le nom de l'application. Avec cette solution ils sont générés automatiquement.
Pour changer le nom il suffit de le changer dans maven.
Même fonctionnement pour toutes les propriétés nécessaire à Sencha.
pour résoudre le second, il m'a fallu me plonger dans les 50 fichiers de travail de Sencha (ce n'est pas un modèle du genre il y a beaucoup de répétitions)
J’ai en corrélation avec le premier point séparé les dossiers sources des dossiers de travail et de la Lib.
le travail se fait donc dans target/Sencha/workspace
les sources sont dans src/main/front la Lib dans src/Lib
Pour le troisième la séparation des dossiers du deuxième point a aidé à le solutionner.
Le point important est qu’à priori le build Sencha n'intervient pas dans la Lib. Il ne fait que prendre les dépendances nécessaires.
En le séparant j'ai pu éviter que maven ne parcoure toute la Lib pour rien. (dans mes premiers tests, il parsait 6800 fichiers).
le build final fonctionne ainsi
phase generate => création du workspace avec tous les params nécessaire.
phase compile => appel de Sencha app buil qui place le résultat dans targert/webapp
phase package => génération du war
vous trouverez ici ce premier test
https://github.com/sekaijin/sencha-sample-maven
la structure du projet
/Sencha modèle de fichier pour le build Sencha
/src/main/frontend les fichiers de l'appli Ext-JS
/src/main/webapp/WEB-INF les descripteur de la webApp java
/src/main/java les fichiers du backend
/src/main/ressources les fichiers qui seront embarqués dans le war
/src/Lib/Sencha/ext la Lib Ext-JS on peut ainsi y placer aussi senchaTouch
/target/classes les classes compilées
/target/Sencha/workspace le dossier de travail de Sencha cmd
/target/webapp le contenu de la webapp
A+JYT
Partager