如何在不使用@header 的情况下使用 gradle antlr 插件将包名称传递给 antlr4 语法

How to pass package name to a antlr4 grammar using gradle antlr plugin without using @header

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

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

generateGrammarSource {
    maxHeapSize = "64m"
    arguments += ["-package my.package.name", "-visitor"]
}

但是我得到的是

Task :generateGrammarSource FAILED error(2): unknown command-line option -package my.package.name

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

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

是否有gradle特定的方法根据包名设置antlr插件的输出位置?

查看一个旧项目,我在 4.10.2 处使用了以下配置和 wrapper 以及与之捆绑的任何 antlr 插件版本:

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

    inputs.files(source.files)
}

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

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