Maven2& Groovy编译错误,但不在Eclipse中

时间:2011-02-11 06:33:39

标签: maven-2 groovy

他,

我正在进行混合的Java / Groovy eclipse项目。

利用groovy插件进行日食,一切都很好。另外我已经设置了我的项目来使用Maven2。而且在日食期间,一切都可以编译和运行(测试)。

但是,在eclipse之外编译项目,即使用Maven2 standalone会给我编译错误!该项目分为几个子项目(父/模块)。 Maven2配置似乎没问题导致一些模块编译但实际上有一个给我一个编译器错误,如:

[ERROR] \Projects\X\rules\src\main\groovy\x\Normalizer.java:[18,25] normalize(java.util.List<java.util.Map<java.lang.String,java.lang.Object>>) in x.
x.util.RuleUtil cannot be applied to (java.util.List<java.util.Map<java.lang.String,?>>)

[ERROR] \Projects\X\rules\src\main\groovy\x\Statistics.java:[70,67] inconvertible types
found   : capture#683 of ?
required: java.lang.String

为什么这段代码在eclipse中编译但不使用独立的Maven2?

提前致谢,  /纳米

2 个答案:

答案 0 :(得分:1)

Groovy Eclipse插件使用Eclipse的插件文件夹(groovy-1.7.5)中的Groovy版本。 最有可能的是,maven文件中引用的Groovy版本不同。您可以在gmaven-runtime中指定它:

      <plugin>
        <groupId>org.codehaus.gmaven</groupId>
        <artifactId>gmaven-plugin</artifactId>
        <version>1.3</version>
        <configuration>
          <providerSelection>1.7</providerSelection>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.gmaven.runtime</groupId>
            <artifactId>gmaven-runtime-1.7</artifactId>
            <version>1.3</version>
            <exclusions>
              <exclusion>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy-all</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>1.7.5</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <goals>
              <goal>generateStubs</goal>
              <goal>compile</goal>
              <!-- <goal>generateTestStubs</goal> -->
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

答案 1 :(得分:1)

您遇到的问题是存根生成问题。 GMaven为您的Groovy文件创建Java存根,以便针对剩余的Java文件进行编译。如果您的应用程序完全使用Groovy,或者没有从Java类到Groovy类的引用,则可以删除<goal>generateStubs</goal>目标。

Groovy-Eclipse编译器不需要存根,所以你没有在Eclipse中看到这个问题。

如果你确实需要在Groovy和Java之间进行交叉引用,我建议使用groovy-eclipse-compiler插件来实现maven。更多信息请点击此处:

http://contraptionsforprogramming.blogspot.com/2010/09/where-are-all-my-stubs.html

有了这个,您将确保Eclipse内部和外部的编译完全相同。