2010-08-31 14 views
11

Ich benutze Eclipse 3.5 (Galileo) mit installierten m2eclipse und GWT Eclipse Plugins. Ich habe ein Projekt mit dem Archetyp gwt-maven-plugin erstellt. Ich habe einen RPC-Dienst mit diesen Klassen definiert erstellt:GWT Maven Eclipse Plugin - Kompilierung schlägt wegen Duplicate fehl Klasse

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

Wenn ich laufen mvn clean wird das Zielverzeichnis entfernt wird (wie exepected). Wenn ich gwt:compile gwt:run -X -e laufen lasse, erhalte ich die Fehlermeldung:

[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 

Nach dem Scheitern hat das Zielverzeichnis mit der folgenden Verzeichnisstruktur und die einzelnen Datei in sich als solche geschaffen:

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

Da die Das Zielverzeichnis war vor der Ausführung von gwt:compile gwt:run -X -e nicht vorhanden, die Verzeichnisse müssen erstellt und die Java-Klasse als Teil der Ausführung des Ziels kopiert worden sein. Warum sollte sich das Ziel nun über eine doppelte Klasse beschweren?

Jede Hilfe wird sehr geschätzt!

Antwort

32

Ich habe this posting gefunden in dem es heißt:

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

Das Update war <goal>generateAsync</goal> von meinem pom.xml zu entfernen. Die Plugin-Konfiguration sieht jetzt so aus:

<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

Sie könnten tatsächlich eine doppelte Klasse generiert haben.

In pom.xml gibt es ein Ziel "generateAsync", das für jeden von Ihnen erstellten Dienst Async-Klassen erstellt. Wenn Sie dies haben, müssen Sie keine Async-Version manuell erstellen.

Wenn Sie dann tun, erhalten Sie "Duplicate Class" -Fehler.

Verwandte Themen