Rechercher

lundi 13 décembre 2010

Travailler avec plusieurs projets GWT sous Eclipse

Si vous voulez faire un projet partagé avec plusieurs autres, votre petite API quoi, vous devez forcément en GWT créer deux modules. C'est comme ça que sont faites toutes les apis du type gxt, mosaic, gwt-dnd ..
Voici un petit exemple pour créer deux projets gwt, l'un héritant de l'autre, puis l'upload sur App Engine :

1) Créez un Java Project classique, ce sera le projet "api". Ajoutez le sdk gwt depuis le plugin, puis créez votre module xxx.gwt.xml. Il n'a pas besoin d'entry-point car il n'a pas vocation à être directement intégré à une page html.
Vous pouvez maintenant placer vos widgets ou je ne sais quoi dans un package nommé client.


2) Créez maintenant votre projet à deployer sur app engine, je l’appellerais "app".
Il faut cette fois faire un nouveau projet Web Application, ajoutez lui les sdk gwt et appengine
Le module contenant votre entry-point devra hérité de "api"


Maintenant, c'est un peu ici le piège, le fait d'ajouter votre projet "api" en dépendance dans le build path de "app" fonctionne pour la compilation, mais vous aurez surement une erreur au run-time du type java.lang.NoClassDefFoundError, sur l'une de vos classes provenant de "api".
La technique est de ne pas mettre une dépendance du projet, mais ajouter le dossier "src" de "api" en tant que source de "app".


C'est peut-être optionnel, mais dans les debug configs, vous pouvez ajouter dans l'onglet "classpath" le projet "api" :


Vous pouvez donc maintenant utiliser depuis "app" les widgets et classes de "api", et ceci sans avoir à recompiler et inclure le jar dans les libs.

3) Faites un petit "Hello World" dans votre projet "app" qui utilise du code de votre second projet, et déployez le sur App Engine.
Si vous prenez un "[ERROR] Module has no entry points defined", c'est parce que le plugin va essayer de compiler votre le module "api", or votre "app" en hérite, ce qui est suffisant pour le compilateur.
Il vous faut enlever dans la configuration la compilation du module "api", pour ne garder seulement celui ou ceux de "app" :


Votre projet devrait maintenant compiler correctement et s'installer sur le cloud Google.

Aucun commentaire:

Enregistrer un commentaire