我清理生成的.class文件,然后重新构建我的应用程序。如果第一次调用生成的AST构造函数发生在.java类中,我会收到错误。但是如果我首先在.groovy类中调用由@Immutable
注释生成的构造函数,那么.java类就会显示它,因为字节码已经生成并且没有错误发生。
所以我想知道如何设置gradle所以它编译所有groovy类所需的AST转换首先,所以我可以正确使用.java类?另外,我如何使用@Builder
生成的.java类代码,因为javac没有看到任何ClassName.bulder()
方法?
这是我的带有ASTT的.groovy类
@Immutable class A {
String a;
}
以下是我从.java类
调用其构造函数的方法public class Test {
A b = new A("321");
}
我得到的错误:
错误:"类[跳过]中的构造函数不能应用于给定类型;要求:找不到参数:[跳过]原因:实际和 正式参数列表的长度不同"。
我正在使用Intellij IDEA 14.4和Gradle来构建。
答案 0 :(得分:0)
我曾经有过类似的问题。对我有用的是通过在build.gradle中将Java的源集设置为空列表来阻止Java在Groovy之前运行。
据我了解,Groovy编译器将通过这种方式将Java文件委派给Java,但会以正确的顺序进行。另一方面,Java编译将忽略Groovy文件,这将导致您看到的未实现的依赖关系。
plugins {
id 'groovy'
id 'java'
}
sourceCompatibility = 11
sourceSets {
main {
java {
srcDirs = [] // don't compile Java code twice
}
groovy {
srcDirs += 'src/main/java'
}
}
}
// …