Подтвердить что ты не робот

Плагин GWT Maven Eclipse - компиляция завершается из-за дублирования класса

Я использую Eclipse 3.5 (Galileo) с плагинами m2eclipse и GWT Eclipse. Я создал проект, используя архетип gwt-maven-plugin. Я создал службу RPC, определенную с помощью этих классов:

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

Когда я запускаю mvn clean, целевой каталог удаляется (как показано на рисунке). Когда я запускаю gwt:compile gwt:run -X -e, я получаю ошибку:

[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

После сбоя целевой каталог был создан со следующей структурой каталогов и единственным файлом в нем как таковым:

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

Поскольку целевой каталог не существовал до запуска gwt:compile gwt:run -X -e, каталоги должны были быть созданы, а класс java был скопирован как часть выполнения цели. Итак, почему цель теперь жаловаться на дублирующий класс?

Любая помощь очень ценится!

4b9b3361

Ответ 1

Я нашел это сообщение, в котором говорится:

Если вы вручную создаете интерфейс Async, вы должны отключить цель generateAsync в конфигурации плагина

Исправлено удаление <goal>generateAsync</goal> из моего pom.xml. Конфигурация плагина теперь выглядит так:

<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>

Ответ 2

Возможно, вы создали дублированный класс.

В pom.xml есть цель "generateAsync", которая заботится о создании классов Async для каждой создаваемой вами службы. Если у вас это есть, вам не нужно создавать версию Async вручную.

Если вы это сделаете, вы получите ошибку "Duplicate Class".