代码之家  ›  专栏  ›  技术社区  ›  stolsvik

“groovyc”能被告知只生成存根吗?(Java+Groovy+Kotlin联合编译)

  •  3
  • stolsvik  · 技术社区  · 7 年前

    我目前正在研究一种理论,即如果groovyc可以作为第一阶段发出存根文件,那么它应该是可能的。

    可以吗?否则,有没有关于从Groovy的源代码中创建这样一个特性的建议?

    以下是完全混合编译的思想:

    1. (这就是问题的关键所在,这个问题是关于:让groovyc(或其中的一部分)只生成存根)。
    2. 让Kotlinc编译Kotlin文件,基于Java的Java文件和Groovy的Java存根(通过将它们添加到Kotlinc的类路径)
    3. 让Javac编译Java文件,基于Groovy的Java存根和Kotlin的类文件(通过将它们添加到Javac的类路径,或者为Java存根使用-sourcepath)。
    1 回复  |  直到 7 年前
        1
  •  1
  •   Paul King    5 年前

    这是相对容易的编程方式,但目前不支持从命令行。对于编程用法,您需要类似于[1]的内容,但是引用行上的阶段更改为语义分析。你还需要按照[2]的要求保存存根。

    [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

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

        2
  •  -1
  •   Stephen Smith    7 年前

    使用Gradle或Maven等构建工具。

    它们有一个标准的项目文件布局,用于指定目录结构和命名约定。将groovy源文件放在/src/groovy/下,java源文件放在/src/java/下,类似于kotlin。

    使用所选的构建工具初始化项目目录并准备基本构建配置。如果构建配置告诉工具有多种语言,那么它们会在编译时自动相互了解。更重要的是,如果您使用IntelliJ之类的IDE(甚至是免费版本),编辑器将了解构建配置并了解多种语言,并提供导入建议和类/方法完成。

    Groovy调用Java是我每天都在使用的东西,Java到Groovy也是可能的,但是您需要理解Groovy是如何工作的,因为有许多Groovy编码习惯用法不能直接从Java调用,但是标准类可以完美地工作。

    类似的限制也适用于科特林。