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

发布于 2024-10-17 02:20:39 字数 763 浏览 1 评论 0原文

他,

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

在 eclipse 中使用 groovy 插件一切都编译得很好。此外,我还设置了我的项目以利用 Maven2。而且在 Eclipse 中一切都可以正常编译和运行(测试)。

然而,在 Eclipse 之外编译项目,即使用 Maven2 独立版会给我编译器错误!该项目分为几个子项目(父项目/模块)。 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?

提前致谢, /纳米

He,

I am having a mixed Java / Groovy eclipse project.

Inside eclipse utilizing the groovy plugin everything compiles just fine. In addition I have set up my project to utilize Maven2. And still everything compiles and runs (tests) just fine within eclipse.

However, compiling the project outside eclipse, i.e. using Maven2 standalone gives me compiler errors! The project is devided into several sub-projects (parent / module). The Maven2 configuration seems to be OK cause some of the modules compile but actually one gives me an compiler error, like:

[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

Why is this code compiling within eclipse but not using standalone Maven2?

Thanks in advance,
/nm

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红ご颜醉 2024-10-24 02:20:39

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

Groovy-Eclipse 编译器不需要存根,因此您在 Eclipse 中不会看到此问题。

如果您确实需要 Groovy 和 Java 之间的交叉引用,我建议使用 maven 的 groovy-eclipse-compiler 插件。更多信息如下:

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

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

The problem that you are facing is a stub generation problem. GMaven creates Java stubs for your Groovy files to compile against the remaining Java files. If your application is completely in Groovy, or there is no referencing from Java classes to Groovy classes, you can remove the <goal>generateStubs</goal> goal.

The Groovy-Eclipse compiler does not require stubs and so you are not seeing this issue inside of Eclipse.

If you do require cross referencing between Groovy and Java, I'd recommend using the groovy-eclipse-compiler plugin for maven. More information is here:

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

With this, you will be sure that your compilation inside Eclipse and outside works exactly the same.

寄居者 2024-10-24 02:20:39

Groovy Eclipse 插件使用 Eclipse 插件文件夹中提供的 Groovy 版本 (groovy-1.7.5)。
最有可能的是,您的 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>

The Groovy Eclipse plugin uses the version of Groovy presents within the plugin folder of Eclipse (groovy-1.7.5).
Most probably, the version of Groovy referenced in your maven file is different. You can specify it thought in the 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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文