我有一个混合(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编译器(groovy-eclipse-batch-2.4.3-01.jar)
如果我使用javac作为Java编译器进行尝试,我会收到类似的错误(java:找不到构建器的symbel)。
如果我从Java类中删除了构建器的使用,那么项目构建完美,并且我能够使用构建器,至少我对groovy类没有任何更改。
答案 0 :(得分:2)
您受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模块。