无法从.java类访问带有参数的@Immutable类的构造函数
我清理生成的.class文件,并重新构建我的应用程序。如果对生成的AST构造函数的第一次调用发生在.java类中,我会得到一个错误。但如果我首先调用由.groovy类中的无法从.java类访问带有参数的@Immutable类的构造函数,java,groovy,gradle,abstract-syntax-tree,Java,Groovy,Gradle,Abstract Syntax Tree,我清理生成的.class文件,并重新构建我的应用程序。如果对生成的AST构造函数的第一次调用发生在.java类中,我会得到一个错误。但如果我首先调用由.groovy类中的@Immutable注释生成的构造函数,它将对.java类可见,因为字节码已经生成,并且没有错误发生 所以我想知道如何设置gradle,让它首先用所需的AST转换编译所有groovy类,这样我就可以从.java类中正确使用它了?另外,既然javac没有看到任何ClassName.bulder()方法,那么如何使用@Builder
@Immutable
注释生成的构造函数,它将对.java类可见,因为字节码已经生成,并且没有错误发生
所以我想知道如何设置gradle,让它首先用所需的AST转换编译所有groovy类,这样我就可以从.java类中正确使用它了?另外,既然javac没有看到任何ClassName.bulder()
方法,那么如何使用@Builder
从.java类生成的代码呢
@Immutable class A {
String a;
}
public class Test {
A b = new A("321");
}
我正在使用Intellij IDEA 14.4和Gradle进行构建。我曾经遇到过类似的问题。对我来说,有效的方法是通过将build.gradle中的源代码集设置为空列表(见下面的代码)来阻止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'
}
}
}
// …
你有一个简单的例子吗?创建一个构造函数拥有的类(对象)的实例。这将自动调用构造函数。我发现的问题似乎与Groovy完全相同,但Groovy还不可能做到这一点。看到这个问题了吗