【问题标题】:GWT Maven Eclipse Plugin - Compilation Fails Due to Duplicate ClassGWT Maven Eclipse 插件 - 由于重复类而导致编译失败
【发布时间】:2011-04-06 10:07:40
【问题描述】:

我正在使用安装了 m2eclipse 和 GWT Eclipse 插件的 Eclipse 3.5 (Galileo)。我使用 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 类作为执行目标的一部分。那么,为什么现在目标会抱怨重复类呢?

非常感谢任何帮助!

【问题讨论】:

    标签: java eclipse gwt m2eclipse


    【解决方案1】:

    我找到了this posting 声明:

    如果您手动创建异步接口,则必须在插件配置中禁用 generateAsync 目标

    解决方法是从我的 pom.xml 中删除 <goal>generateAsync</goal>。插件配置现在看起来像:

    <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”目标,它负责为您创建的每个服务生成异步类。如果你有这个,你不需要手动创建异步版本。

      如果你这样做了,你会得到“Duplicate Class”错误。

      【讨论】:

        猜你喜欢
        • 2015-11-09
        • 1970-01-01
        • 1970-01-01
        • 2013-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-04
        • 2011-05-25
        相关资源
        最近更新 更多