如何在不使用@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
当我将 -package
和 my.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)
,因为尽管语法发生了变化,任务仍被错误地认为是最新的,不确定该部分是否仍然是必需的。
您有责任确保输出目录中的路径与指定包的路径匹配。
我正在尝试在 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
当我将 -package
和 my.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)
,因为尽管语法发生了变化,任务仍被错误地认为是最新的,不确定该部分是否仍然是必需的。
您有责任确保输出目录中的路径与指定包的路径匹配。