如何使用 gradle antlr 插件将包名称传递给 antlr4 语法而不使用 @header

Mic*_*luk 1 antlr4 gradle-plugin

我正在尝试在 gradle 中设置 Antlr 任务,以在与包名称匹配的文件夹中生成源。

我尝试将包添加到语法的 @header 中,但这不会像 IntelliJ Antlr 插件那样生成包文件夹树。我还尝试按照下面的示例将包传递给属性来使用 CLI 参数。

generateGrammarSource {
    maxHeapSize = "64m"
    arguments += ["-package my.package.name", "-visitor"]
}
Run Code Online (Sandbox Code Playgroud)

然而我得到的是

任务:generateGrammarSource FAILED错误(2):未知的命令行选项-package my.package.name

当我将-packagemy.package.name放入单独的条目 ( ["-package", "my.package.name", "-visitor"]) 时,代码生成会运行,但既不会将包添加到代码中,也不会创建文件夹。好像被忽略了

我使用 Antlr 版本 4.7.2,并且 gradle 与 intellij 191 捆绑在一起。

是否有一种特定于 gradle 的方法可以根据包名称设置 antlr 插件的输出位置?

Spe*_*ark 5

查看一个旧项目,我使用以下配置与包装器 at4.10.2以及与之捆绑的任何 antlr 插件版本:

generateGrammarSource {
    outputDirectory = file("$outputDirectory/org/mellowd/compiler")
    arguments += ['-package', 'org.mellowd.compiler']
    arguments += ['-visitor']
    arguments += ['-no-listener']

    inputs.files(source.files)
}
Run Code Online (Sandbox Code Playgroud)

inputs.files(source.files)当时是必需的,因为尽管语法发生了变化,但该任务被错误地认为是最新的,不确定该部分是否仍然是必要的。

您有责任确保输出目录中的路径与指定的包的路径匹配。