java - 可以告诉 'groovyc' 只生成 stub 吗? (Java+Groovy+Kotlin联合编译)

标签 java groovy kotlin compilation groovyc

我正在尝试在所有 Java、Groovy 和 Kotlin 之间进行联合/混合编译。 我目前正在研究一个理论,即如果可以让 groovyc 只在第一阶段发出 stub 文件,那应该是可能的。

可以吗?否则,是否有关于使用 Groovy 源代码制作此类功能的指示?

这里是全混合编译的思路:

  1. 让 Groovyc 为其所有类创建 Java stub 。 AFAIU,它会逐个文件“盲目”执行此操作,而不会看到任何其他来源。 (这很重要,这个问题是关于什么的:让 groovyc(或其一部分)仅生成 stub )。
  2. 让 Kotlinc 编译 Kotlin 文件,基于 Java 的 Java 文件类型和 Groovy 的 Java stub (通过将它们添加到 kotlinc 的类路径)
  3. 让 Javac 编译 Java 文件,基于 Groovy 的 Java stub 和 Kotlin 类文件的类型(通过将它们添加到 javac 的类路径,或为 Java stub 使用 -sourcepath)。
  4. 让 Groovyc 编译 Groovy 文件,基于 Java 类文件的类型和 Kotlin 类文件(通过将它们添加到 groovyc 的类路径)。

最佳答案

这相对容易以编程方式完成,但目前不支持命令行。对于程序化使用,您需要类似 [1] 的内容,但将引用行上的阶段更改为 SEMANTIC_ANALYSIS。您还需要按照 [2] 保留 stub 。

要从命令行启用此功能,FileSystemCompiler 需要知道完成阶段,并且 [3] 中的 unit.compile() 语句需要知道该阶段。但我自己并没有真正尝试过这些改变。

[1] https://github.com/apache/groovy/blob/master/src/test/groovy/bugs/Groovy6086Bug.groovy#L63

[2] https://github.com/apache/groovy/blob/master/src/test/groovy/bugs/Groovy9031.groovy#L33

[3] https://github.com/apache/groovy/blob/master/src/main/java/org/codehaus/groovy/tools/FileSystemCompiler.java#L309-L317

关于java - 可以告诉 'groovyc' 只生成 stub 吗? (Java+Groovy+Kotlin联合编译),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53759596/

相关文章:

android - 导航组件 : NavHostFragment inside a fragment

java - 使用 Maven 插件 Web.xml 未包含在 War 中

java - JAX-RS 资源生命周期性能影响

Java:在运行时检查类是否存在

data-structures - 并行访问 Groovy 列表中的元素

date - 如何使用 Groovy 的 .format() 方法显示本地时间?

android - 从 NavHost 迁移到 AnimatedNavHost

Android:带有 Butterknife 的 Kotlin

java - crontab quartz 时间表

常规 : Is it possible to make a dynamic property with this?