无法从.java类

时间:2015-09-19 16:52:21

标签: java groovy gradle abstract-syntax-tree

我清理生成的.class文件,然后重新构建我的应用程序。如果第一次调用生成的AST构造函数发生在.java类中,我会收到错误。但是如果我首先在.groovy类中调用由@Immutable注释生成的构造函数,那么.java类就会显示它,因为字节码已经生成并且没有错误发生。

所以我想知道如何设置gradle所以它编译所有groovy类所需的AST转换首先,所以我可以正确使用.java类?另外,我如何使用@Builder生成的.java类代码,因为javac没有看到任何ClassName.bulder()方法?

  1. 这是我的带有ASTT的.groovy类

    @Immutable class A {
        String a;
    }
    
  2. 以下是我从.java类

    调用其构造函数的方法
    public class Test {
         A b = new A("321");
    }
    
  3. 我得到的错误:

      

    错误:"类[跳过]中的构造函数不能应用于给定类型;要求:找不到参数:[跳过]原因:实际和   正式参数列表的长度不同"。

  4. 我正在使用Intellij IDEA 14.4和Gradle来构建。

1 个答案:

答案 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'
        }
    }
}

// …