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

时间:2019-06-04 13:19:24

标签: antlr4 gradle-plugin

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

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

stateRecord

但是我得到的是

  

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

当我将generateGrammarSource { maxHeapSize = "64m" arguments += ["-package my.package.name", "-visitor"] } -package放入单独的条目(my.package.name)中时,将运行代码生成,但是既没有将程序包添加到代码中,也没有创建文件夹。似乎被忽略了

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

是否有基于包名称的基于gradle的方式来设置antlr插件的输出位置?

1 个答案:

答案 0 :(得分:2)

看着一个旧项目,我在4.10.2使用了带有包装器的以下配置,并且捆绑了任何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),因为尽管语法发生了变化,但该任务仍被错误地认为是最新的,因此不确定是否仍然需要该部分。

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