由gwt-maven-plugin生成的maven项目无法通过导入现有的maven项目导入到eclipse中

时间:2014-11-25 19:01:53

标签: eclipse maven gwt google-eclipse-plugin

我首先通过执行 -

生成了一个gwt maven项目
  

mvn archetype:generate -DarchetypeGroupId = org.codehaus.mojo   -DarchetypeArtifactId = gwt-maven-plugin -DarchetypeVersion = 2.7.0

之后,pom.xml如下:

        <?xml version="1.0" encoding="UTF-8"?>
    <project
      xmlns="http://maven.apache.org/POM/4.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

      <modelVersion>4.0.0</modelVersion>
      <groupId>com.boye.games</groupId>
      <artifactId>games-gwt</artifactId>
      <packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>GWT Maven Archetype</name>

      <properties>
        <!-- Convenience property to set the GWT version -->
        <gwtVersion>2.7.0</gwtVersion>

        <!-- GWT needs at least java 1.6 -->
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>

      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt</artifactId>
            <version>${gwtVersion}</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>

      <dependencies>
        <dependency>
          <groupId>com.google.gwt</groupId>
          <artifactId>gwt-servlet</artifactId>
          <scope>runtime</scope>
        </dependency>
        <dependency>
          <groupId>com.google.gwt</groupId>
          <artifactId>gwt-user</artifactId>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>com.google.gwt</groupId>
          <artifactId>gwt-dev</artifactId>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.11</version>
          <scope>test</scope>
        </dependency>
      </dependencies>

      <build>
        <!-- Output classes directly into the webapp, so that IDEs and "mvn process-classes" update them in DevMode -->
        <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>

        <plugins>

          <!-- GWT Maven Plugin -->
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <version>2.7.0</version>
            <executions>
              <execution>
                <goals>
                  <goal>compile</goal>
                  <goal>test</goal>
                  <goal>generateAsync</goal>
                </goals>
              </execution>
            </executions>
            <!-- Plugin configuration. There are many available options, see 
              gwt-maven-plugin documentation at codehaus.org -->
            <configuration>
              <runTarget>LineThree.html</runTarget>
              <modules>
                <module>com.boye.games.linethree.LineThree</module>
              </modules>
            </configuration>
          </plugin>
        </plugins>
      </build>

    </project>

然后我通过内置的eclipse函数将这个项目导入eclipse - 导入现有的Maven项目。

然而,由于以下几个原因,该过程失败了:

  1. GreetingServiceAsync无法解析为
  2. 类型
  3. 目标org.codehaus.mojo:gwt-maven-plugin:2.7.0:generateAsync的执行默认值失败:
  4.   

    插件org.codehaus.mojo:gwt-maven-plugin:2.7.0或其中一个   无法解析依赖项:无法收集依赖项   org.codehaus.mojo:gwt-maven-plugin:jar:2.7.0()   (org.codehaus.mojo:GWT-行家-插件:2.7.0:generateAsync:默认:产生来源)

    1. google插件无法自动将此项目识别为gwt web应用程序。
    2. 我的环境如下:

      1. java version 1.7.0_03
      2. eclipse版本Kepler Service Release 2
      3. gwt version 2.7.0
      4. 请提出建议,非常感谢!

4 个答案:

答案 0 :(得分:1)

问题在于generateAsync,在您的情况下会在执行时生成GreetingServiceAsync。 Eclipse可能没有配置为正确处理它,并且没有生成此类,并且eclipse报告了缺少的类警告。

让项目工作可以做的另一件事是从命令行运行mvn包并在eclipse中将生成的dir作为源dir添加到目标dir中(右键单击项目并选择New - &gt; source folder &gt;浏览文件夹名称&gt;目标&gt; generated-sources&gt;正确的文件夹)

此外,在执行mvn clean后可能会遇到同样的问题 - 生成的GreetingServiceAsync将被删除,问题可能会再次出现。

问题的存在是因为eclipse没有与maven紧密集成,并使用自己的构建系统忽略了你没有插件的maven目标。你能做的就是打开eclipse首选项&gt; maven&gt;生命周期映射,您可以在其中启用generateAsync来执行。

如果您手动复制生成的类,则必须记住,您需要在需要时更新它,因为它是自动生成的。所以你放松了这个便利。

答案 1 :(得分:1)

我再尝试尝试使用win32计算机,即使我在win64计算机上设置了上述环境,也会重新出现问题。

所以我真的很困惑,就像Klarki说的那样,我必须做一些调整才能让它发挥作用。我通过mvn gwt生成GreetingServiceAsync:generateAsync然后手动将GreetingServiceAsync复制到源文件夹,然后我在pom.xml中删除<goal>generateAsync</goal>,然后通过eclipse的现有maven项目导入项目。它又有效了!

遗憾地看到它不能聪明地工作。

答案 2 :(得分:1)

这项工作对我来说:

我在Windows 7中删除了本地maven gwt存储库,它位于C:\ Users \ .m2 \ repository \ com \ google \ gwt中,然后创建

mvn clean complile

所以maven重新导入al dependencys。

答案 3 :(得分:0)

我改变了我的环境后如下:

  1. java版“1.8.0_05”
  2. eclipse版本:Luna Release(4.4.0)
  3. Eclipse 4.4的谷歌插件
  4. 我的工作就像一个魅力。

    可能是版本不兼容问题。