无法从.java类访问带有参数的@Immutable类的构造方法

Pav*_* V. 5 java groovy abstract-syntax-tree gradle

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

所以,我想知道我怎么设置gradle这个所以编译所有的Groovy类与所需的AST转换第一个,这样我就可以从的.java类正确地使用它?另外,@Builder由于javac没有看到任何ClassName.bulder()方法,我如何使用.java类生成的代码?

  1. 这是我与ASTT的.groovy课

    @Immutable class A {
        String a;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这是我从.java类中调用其构造函数的方法

    public class Test {
         A b = new A("321");
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我得到的错误是:

    错误:“类[已跳过]中的构造函数无法应用于给定类型;必需:未找到参数:[已跳过]原因:实际参数和形式参数列表的长度不同”。

我正在使用Intellij IDEA 14.4和Gradle进行构建。

Mic*_*ael 0

我曾经遇到过类似的问题。对我有用的是通过将 build.gradle 中的源集设置为空列表来阻止 Java 在 Groovy 之前运行(请参见下面的代码)。

\n\n

据我了解,通过这种方式,Groovy 编译器会将 Java 文件委托给 Java,但会以正确的顺序执行。另一方面,Java 编译将忽略 Groovy 文件,这会导致您看到未实现的依赖关系。

\n\n
plugins {\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\n
Run Code Online (Sandbox Code Playgroud)\n