GWT Maven Eclipse Plugin – Échec de la compilation en raison d’une classe en double

J’utilise Eclipse 3.5 (Galileo) avec les plug-ins m2eclipse et GWT Eclipse installés. J’ai créé un projet en utilisant l’archétype gwt-maven-plugin. J’ai créé un service RPC défini avec ces classes:

my.package.client.DataService my.package.client.DataServiceAsync my.package.server.DataServiceImpl 

Lorsque mvn clean , le répertoire cible est supprimé (comme prévu). Quand je lance gwt:comstack gwt:run -X -e , j’obtiens l’erreur suivante:

 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-comstackr-plugin:2.0.2:comstack (default-comstack) on project MyProject: Compilation failure C:\Devel\EclipseProjects\MyProject\target\generated-sources\gwt\my\package\client\DataServiceAsync.java:[8,7] duplicate class: my.project.client.DataServiceAsync -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-comstackr-plugin:2.0.2:comstack (default-comstack) on project MyProject: Compilation failure C:\Devel\EclipseProjects\MyProject\target\generated-sources\gwt\my\package\client\DataServiceAsync.java:[8,7] duplicate class: my.project.client.DataServiceAsync at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:581) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeForkedExecutions(DefaultLifecycleExecutor.java:685) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:560) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:324) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:247) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:104) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:427) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:157) at org.apache.maven.cli.MavenCli.main(MavenCli.java:121) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) Caused by: org.apache.maven.plugin.CompilationFailureException: Compilation failure C:\Devel\EclipseProjects\MyProject\target\generated-sources\gwt\my\package\client\DataServiceAsync.java:[8,7] duplicate class: my.project.client.DataServiceAsync at org.apache.maven.plugin.AbstractComstackrMojo.execute(AbstractComstackrMojo.java:516) at org.apache.maven.plugin.ComstackrMojo.execute(ComstackrMojo.java:114) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:105) at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:577) ... 16 more [ERROR] [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 

Après l’échec, le répertoire cible a été créé avec la structure de répertoires suivante et le fichier unique qu’il contient:

 MyProject/target/generated-sources/gwt/my/project/client/DataServiceAsync.java 

Comme le répertoire cible n’existait pas avant l’exécution de gwt:comstack gwt:run -X -e , les répertoires doivent avoir été créés et la classe java copiée dans le cadre de l’exécution de l’objective. Alors, pourquoi l’objective se plaindrait-il maintenant d’une classe en double?

Toute aide est grandement appréciée!

J’ai trouvé cette publication qui dit:

Si vous créez manuellement l’interface asynchrone, vous devez désactiver l’objective generateAsync dans la configuration du plugin.

Le correctif consistait à supprimer generateAsync de mon pom.xml. La configuration du plugin ressemble maintenant à:

  org.codehaus.mojo gwt-maven-plugin 1.2    comstack test     my.package.Application/Application.html   

Vous avez peut-être réellement généré une classe en double.

Il existe un objective “generateAsync” dans pom.xml qui se charge de générer des classes asynchrones pour chaque service que vous créez. Si vous possédez cela, vous N’AVEZ PAS BESOIN de créer une version asynchrone manuellement.

Si vous le faites, vous obtiendrez l’erreur “Classe en double”.