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

Antlr4 如何在不使用@header的情况下使用gradle antlr插件将包名传递给Antl4语法,antlr4,gradle-plugin,Antlr4,Gradle Plugin,我试图在gradle中设置Antlr任务,以便在与包名匹配的文件夹中生成源 我已经尝试在语法的@header中添加包,但是这不会以与IntelliJ Antlr插件相同的方式生成包文件夹树。 我已经尝试使用CLI参数,按照下面的示例将包传递给attibutes generateGrammarSource { maxHeapSize = "64m" arguments += ["-package my.package.name", "-visitor"] } 然而我得到的是 任务

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

我已经尝试在语法的@header中添加包,但是这不会以与IntelliJ Antlr插件相同的方式生成包文件夹树。 我已经尝试使用CLI参数,按照下面的示例将包传递给attibutes

generateGrammarSource {
    maxHeapSize = "64m"
    arguments += ["-package my.package.name", "-visitor"]
}
然而我得到的是

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

当我将-package和my.package.name放入单独的条目[-package,my.package.name,-visitor]时,会运行代码生成,但既不会将包添加到代码中,也不会创建文件夹。似乎它被忽视了

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


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

查看一个旧项目,我使用了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.filesource.files,因为尽管语法发生了变化,但任务被错误地认为是最新的,不确定该部分是否仍然必要


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

查看一个旧项目,我使用了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.filesource.files,因为尽管语法发生了变化,但任务被错误地认为是最新的,不确定该部分是否仍然必要


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

-包应该可以工作。如果您这样做会发生什么:arguments+=[-package,my.package.name,-visitor]?@BartKiers,当我将-package和my.package.name放入单独的条目时,代码生成会运行,但既不会将包添加到代码中,也不会创建文件夹。似乎它被忽略了……好吧,那我就没什么想法了,我从来没有把Gradle和ANTLR一起用过。我在你的问题上加了一条额外的信息-包应该有用。如果您这样做会发生什么:arguments+=[-package,my.package.name,-visitor]?@BartKiers,当我将-package和my.package.name放入单独的条目时,代码生成会运行,但既不会将包添加到代码中,也不会创建文件夹。似乎它被忽略了……好吧,那我就没什么想法了,我从来没有把Gradle和ANTLR一起用过。我在你的问题中添加了那条额外的信息。这确实奏效了。似乎解决方案是将参数+=['-package',org.mellowd.compiler']作为一个单独的赋值,但不确定它为什么重要。。。根据file forlder结构,我只是对包名和文件夹使用了相同的变量,显然是将“.”替换为“/”。这实际上起到了作用。似乎解决方案是将参数+=['-package',org.mellowd.compiler']作为一个单独的赋值,但不确定它为什么重要。。。根据file-forlder结构,我只是对包名和文件夹使用了相同的变量,显然将“.”替换为“/”。