【问题标题】:IntelliJ build mixed Groovy and Java project fails with cannot find symbolIntelliJ 构建混合 Groovy 和 Java 项目失败,找不到符号
【发布时间】:2017-04-26 09:42:48
【问题描述】:

我有一个混合的(Java 和 Groovy)IntelliJ 项目。我的 Groovy 类正在使用 @Builder 注释。我可以从 Java 访问构建器,但是在项目的构建过程中它失败了......

Error:(27, 105) java: cannot find symbol
symbol:   method builder()
location: class foo.bar.Sample

如果我注释掉构建器的使用,项目构建得非常好,我可以在生成的类文件中看到构建器。

我认为问题在于构建顺序,即 javac 尝试在编译 Groovy 代码之前编译我的 Java 代码。

知道如何解决这个问题吗?

IntelliJ 版本是 Community 2017.1.2

* 更新 *

我尽量详细介绍我的项目...它是这样设置的...

源码根是:

DataObject groovy 类:

import groovy.transform.builder.Builder

@Builder
class DataObject {
    String message 
}

还有 MainClass...

public class MainClass {

    public static void main(String... args) throws Exception {
        System.out.println(DataObject.builder().message("HelloWorld!").build().getMessage());

        DataObject dataObject = new DataObject();
        dataObject.setMessage("HelloWorld!");
        System.out.println(dataObject.getMessage());
    }
}

Groovy-Eclipse 在字节码版本 1.8 中设置为 Java Compiler (groovy-eclipse-batch-2.4.3-01.jar)

如果我尝试编译项目,我会收到以下错误...

如果我尝试使用 javac 作为 Java 编译器,我会收到类似的错误(java:cannot find symbel for the builder)。

如果我从 Java 类中删除构建器的使用,项目将完美构建并且我能够使用构建器,至少只要我对 groovy 类没有任何更改。

【问题讨论】:

  • 你需要展示你是如何构建它的。考虑groovyc 而不是javac
  • 我不确定要准确显示/描述什么。我使用构建项目 (Ctrl+F9)。 Java 编译器是 Javac (1.8) 来构建项目。我也尝试过 Groovy-Eclipse,但它会导致其他错误(结合泛型和 lambda 流)。 Groovy 编译器没有设置任何内容,但将 Groovy 框架添加到项目中。如何将 groovyc 设置为编译器?我在 Java 编译器屏幕上没有看到该选项
  • 这种情况的通常修复方法是将您的 .java 文件放在使用 groovyc 构建的源根目录下。 Groovyc 仅用作 .java 文件的 javac。
  • 实际上我有两个单独的 src 文件夹... src/main/java 和 src/main/groovy 。你的意思是我应该将我的 java 文件移动到 groovy 根目录?有没有办法禁用 javac 而只使用 groovyc?
  • 您使用什么构建系统?您如何配置项目根目录?请分享Minimal, Complete, and Verifiable example

标签: java intellij-idea groovy


【解决方案1】:

你受到https://issues.apache.org/jira/browse/GROOVY-3683的影响。

假设您使用 sdkman 安装了 Groovy。

$ sdk use groovy 2.4.9
Using groovy version 2.4.9 in this shell.

# This is the error you get using joint compilation
$ groovyc -j src/main/groovy/* 
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Compile error during compilation with javac.
/Users/danyjb/Downloads/GroovyTest/src/main/groovy/MainClass.java:4: error: cannot find symbol
        System.out.println(DataObject.builder().message("HelloWorld!").build().getMessage());
                                     ^
  symbol:   method builder()
  location: class DataObject
1 error

要解决这个问题,你需要分别编译 Groovy 和 Java:

$ groovyc src/main/groovy/DataObject.groovy -d out/
$ javac -cp $GROOVY_HOME/lib/groovy-2.4.9.jar:out/ -d out/ src/main/groovy/MainClass.java

就 IntelliJ IDEA 而言,这意味着您需要将 Groovy 代码放在单独的模块中,并将 Java 模块的依赖项添加到 Groovy 模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    相关资源
    最近更新 更多