You are here

Compiler un module GWT avec les sources d'un projet annexe

Nicolas's picture
Submitted by Nicolas on Tue, 04/11/2014 - 12:11

Dans le cadre du projet en cours, nous avons une application GWT. Elle se base sur une partie du contenu de notre module J2EE core pour fonctionner et doit donc en connaitre les sources pour pouvoir générer son javascript (compilation GWT).

L'approche choisie jusque là a été de copier les sources de core => la web application au moment de la compilation maven. Toujours dans le cadre de cette compilation, lors du traitement de la partie serveur le code copié devait être ignoré via des exclusions. Tout cela ne semblait pas très propre et entrainait une gestion 'tordue' des sources.

Afin de corriger ce point j'ai eu envie de récupérer un jar contenant les sources et de la donner en dépendance à l'application GWT pour sa compilation. Vu les outils utilisés l'option de passer par le plugin maven maven-source-plugin a semblé la solution la plus pérenne.

Pour ce faire le module core voit son pom.xml modifié comme suit :


<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-source-plugin</artifactId>
			<version>2.4</version>
			<configuration>
				<includes>
					<include>le fichier java qui va bien</include>
                    .....
					<include>le fichier .gwt.xml qui va bien aussi</include>
				</includes>
			</configuration>
			<executions>
				<execution>
					<id>attach-sources</id>
					<phase>verify</phase>
					<goals>
						<goal>jar-no-fork</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

Ces modifications ont pour conséquence la génération d'un jar de sources au moment de la validation avant packaging. On remarque qu'on inclue un fichier .gwt.xml dans nos sources qui a peut à voir avec celles-ci. En effet pour que gwt retrouve ses petits on doit lui fournir avec les sources un fichier descripteur de module (en gros on dit que les sources composent un module gwt) afin qu'il soit capable de les compiler. Ici on a choisi de ne pas définir de classifier particulier, en effet nous ne publions pas les sources à l'extérieur donc le fait qu'elles ne soient que partielles ne nous pose pas de problème particulier. Il est toutefois tout à fait possible de définir un classifier particulier pour le jar de source gwt (à lier à un profile dédier dans ce cas) afin de garder la possiblité de publier les sources du projet si nécessaire. Il faudra alors faire attention à bien utiliser le bon classifier lors de la définition de la dépendance dans le module GWT principal, définition que nous allons voir immédiatement! Le pom.xml de l'application GWT est modifié comme suit :


<dependency>
	<groupId>groupe</groupId>
	<artifactId>artifact</artifactId>
	<classifier>sources</classifier>
	<version>version</version>
</dependency>

On note l'utilisation du classifier "sources" qui indique bien que la dépendance voulue est sur le jar de sources (on inclue d'ailleurs pour des besoins côté serveur le jar compilé par ailleurs).
Ainsi notre application web se compile de façon "transparente" sans copier les sources d'un projet à l'autre et en respectant "l'esprit" maven.

That's all folks.

category: