【发布时间】:2020-01-29 20:16:03
【问题描述】:
所以我整个下午都在努力让一些 Gradle 构建为涉及 ANTLR 语法的 Kotlin 多平台项目工作。我想要做的是让 ANTLR 从 Kotlin(或 Java,如果这不起作用)和 JavaScript 目标的共享语法生成一个解析器。基于此,我想围绕解析器编写一些库,可以在 JVM 和 JavaScript 中使用。
所以我建立了一个 Kotlin 多平台项目,因为这似乎是用一块石头杀死两只鸟的好方法(这里是一个 repo https://github.com/derkork/project.txt)。我创建了一个源集commonAntlr,将语法文件放在commonAntlr/antlr/project_txt.g4 下。根据 ANTLR 插件的文档,这就是应该如何设置的东西。我还在顶部应用了antlr 插件(这里是build.gradle.kts - https://github.com/derkork/project.txt/blob/master/build.gradle.kts)。
现在我运行gradle build,希望 ANTLR 插件至少会尝试使用默认设置从语法为我生成一些不错的 Java 代码。唉,事实并非如此。 ANTLR 插件甚至没有启动,这是我从输出中可以看出的。稍后构建失败并出现一些晦涩的 JavaScript 问题,但这看起来无关紧要,我现在想跳过它。
现在我的 Gradle-foo 并不是很强大(我只在极其简单的项目中使用过它,我的大部分经验都是在 Maven 中),我有一种明显的感觉,我在这里遗漏了一些东西。然而插件的documentation 只是说
要使用 ANTLR 插件,请在构建脚本中包含以下内容:
插件{ 蚂蚁 }
我做了什么。由于我的输出为零,我觉得我需要做更多的工作才能让它工作。我已经阅读了很多 Gradle 文档来了解插件的一般工作方式,我发现它们会在构建中添加任务并添加一些依赖项,以便在您尝试构建某些东西时调用任务。但是,我真的不明白插件如何与源集一起工作,以及如何告诉 Gradle“请您为此源集运行 generateGrammarSource 任务”(或者它甚至可以像这样工作)。
因此,如果一些 Gradle 大神能在这方面启发我,将不胜感激 :)
【问题讨论】:
标签: gradle kotlin antlr4 kotlin-multiplatform