Pav*_* V. 5 java groovy abstract-syntax-tree gradle
我清理生成的.class文件,然后重新构建我的应用程序。如果第一次调用生成的AST构造函数是从.java类发生的,则会收到错误消息。但是,如果我首先调用由@Immutable.groovy类中的注释生成的构造函数,则它对于.java类是可见的,因为已经生成了字节码并且没有发生错误。
所以,我想知道我怎么设置gradle这个所以编译所有的Groovy类与所需的AST转换第一个,这样我就可以从的.java类正确地使用它?另外,@Builder由于javac没有看到任何ClassName.bulder()方法,我如何使用.java类生成的代码?
这是我与ASTT的.groovy课
@Immutable class A {
String a;
}
Run Code Online (Sandbox Code Playgroud)这是我从.java类中调用其构造函数的方法
public class Test {
A b = new A("321");
}
Run Code Online (Sandbox Code Playgroud)我得到的错误是:
错误:“类[已跳过]中的构造函数无法应用于给定类型;必需:未找到参数:[已跳过]原因:实际参数和形式参数列表的长度不同”。
我正在使用Intellij IDEA 14.4和Gradle进行构建。
我曾经遇到过类似的问题。对我有用的是通过将 build.gradle 中的源集设置为空列表来阻止 Java 在 Groovy 之前运行(请参见下面的代码)。
\n\n据我了解,通过这种方式,Groovy 编译器会将 Java 文件委托给 Java,但会以正确的顺序执行。另一方面,Java 编译将忽略 Groovy 文件,这会导致您看到未实现的依赖关系。
\n\nplugins {\n id 'groovy'\n id 'java'\n}\n\nsourceCompatibility = 11\n\nsourceSets {\n main {\n java {\n srcDirs = [] // don't compile Java code twice\n }\n groovy {\n srcDirs += 'src/main/java'\n }\n }\n}\n\n// \xe2\x80\xa6\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |