我创建了新的 Gradle 项目,添加了
apply plugin: 'antlr'
and
dependencies {
antlr "org.antlr:antlr4:4.5.3"
to build.gradle
.
Created src/main/antlr/test.g4
包含以下内容的文件
grammar test;
r : 'hello' ID;
ID : [a-z]+ ;
WS : [ \t\r\n]+ -> skip ;
但这不起作用。没有生成java源文件(并且没有发生错误)。
我错过了什么?
项目在这里:https://github.com/dims12/AntlrGradlePluginTest2 https://github.com/dims12/AntlrGradlePluginTest2
UPDATE
我发现我的示例实际上是有效的,但它将代码放入\build\generated-src
这是我没想到的:耻辱:
我将在这里添加其他答案。
Issue 1:生成的源文件放在build/generated-src
folder.
I found 这次讨论 http://gradle.1045684.n5.nabble.com/How-to-configure-where-antlr-generates-source-files-td3320837.html,但是那里的解决方案(设置outputDirectory
属性)是一个bad主意。如果你这样做gradle clean build
命令,这将清除你的entire源目录。那里的讨论很好地解释了为什么你不应该
antlr 生成的源被生成为
像所有其他工件一样,是“build”文件夹的子目录,它们是
构建期间生成。此外你生成的目录
projectRoot/build/ generated-src/antlr/main 添加到 java
源集定义以确保其考虑的compileJava任务。
如果将antlr生成的源码直接写入src/main/java
文件夹,您的构建输出污染了源文件夹
过程。 ...在构建过程中污染源文件夹是一种
我认为是反模式。
但是,如果您想这样做,可以添加一个 gradle 任务来将生成的文件复制到构建目录。
generateGrammarSource << {
println "Copying generated grammar lexer/parser files to main directory."
copy {
from "${buildDir}/generated-src/antlr/main"
into "src/main/java"
}
}
Issue 2: 生成的源文件没有设置包属性。
要解决此问题,请在语法文件顶部附近添加如下内容:
@header {
package com.example.my.package;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)