2010-08-31 3 views
11

Utilizzo Eclipse 3.5 (Galileo) con i plugin m2eclipse e GWT Eclipse installati. Ho creato un progetto usando l'archetipo gwt-maven-plugin. Ho creato un servizio RPC definita con queste classi:GWT Maven Eclipse Plugin - La compilazione non riesce a causa della classe duplicata

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

Quando eseguo mvn clean, la directory di destinazione viene rimosso (come exepected). Quando eseguo gwt:compile gwt:run -X -e, ottengo l'errore:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) 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-compiler-plugin:2.0.2:compile (default-compile) 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.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:516) 
    at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.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 

Dopo il fallimento, la directory di destinazione è stato creato con la seguente struttura di directory e il file singolo in quanto tale:

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

Dal momento che la la directory di destinazione non esisteva prima di eseguire gwt:compile gwt:run -X -e, le directory devono essere state create e la classe java copiata come parte dell'esecuzione dell'obiettivo. Quindi, perché l'obiettivo ora si lamenterebbe di una classe duplicata?

Qualsiasi aiuto è molto apprezzato!

risposta

32

ho trovato this posting in cui si afferma:

If you manually create the Async interface you must disable the generateAsync goal in the plugin configuration

La correzione era di rimuovere <goal>generateAsync</goal> dal mio pom.xml. La configurazione del plugin ora sembra:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>gwt-maven-plugin</artifactId> 
    <version>1.2</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>compile</goal> 
       <goal>test</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <runTarget>my.package.Application/Application.html</runTarget> 
    </configuration> 
</plugin> 
5

In realtà, è possibile che sia stata generata una classe duplicata.

C'è un obiettivo "generateAsync" in pom.xml che si occupa di generare classi Async per ciascun servizio creato. Se si dispone di questo NON È NECESSARIO creare una versione Async manualmente.

Se lo fai, otterrai l'errore "Duplica classe".