我正在努力弄清楚如何使用antlr4 maven插件来运行TestRig类?
我已阅读mvn antlr4:help -Ddetail=true
的输出,这是我能找到的唯一文档,但这并未提及如何使用TestRig。那么,将测试装置与maven一起使用的推荐方法是什么?使用grun别名方法在这里似乎并不优雅。
更新 - 推理
您好:)
是的,不要误会我的意思但我真的不明白为什么你不想在maven插件中使用这个功能?我不明白为什么它的灵魂目的应该是编译语法?
目前,如果我使用Maven维护构建,并使用antlr4-maven-plugin
,它将在我的maven存储库中安装插件和antlr 4.1。有了这个,为什么我会开始在我的类路径中添加东西并在maven可以处理时创建别名?我的意思是,这就是maven的真正含义。如果我有一个antlr4:TestRig
目标,那么我要做的就是使用它。无需手动维护类路径,也无需创建bash别名。它会起作用。
在我的类路径中使用来自本地maven存储库的硬编码元素并保持bash别名远远优雅。或者,每个维护两个安装。我希望使用的antlr版本(一个由我维护,只需使用TestRig,另一个由maven维护)。
此外,如果我想使用不同版本的antlr,那么我不需要更新类路径和我的别名,maven会简单地为我管理所有这些:)
答案 0 :(得分:2)
我有一个类似的问题,因为我想使用TestRig
-gui
选项来调试我的语法。我没有找到通过antlr4-maven-plugin
运行GUI的方法,但我确实设法建立了一个令人满意的CLASSPATH。关键是要包括target/classes
。
# Assuming your project is in $PROJECT ..
CLASSPATH=".:/usr/local/lib/antlr-4.1-complete.jar:$PROJECT/target/classes"
alias grun='java org.antlr.v4.runtime.misc.TestRig'
mvn -q compile
grun MyGrammer startingRule -gui < test_input
应该生成语法树的可爱GUI视图。
这可能不是您正在寻找的答案,但我希望它可以帮助其他人。 (例如,我,明天,当我忘记)
答案 1 :(得分:2)
这就是我用Maven调用TestRig的方法:
mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig"
-Dexec.args="<DOT_NOTATION_GRAMMAR_CLASSPATH> <START_RULE>
-gui <INPUT_FILE>"
所以如果你在src / main / antlr4 / com / test / parser中有一个启动规则为startRule的MyGrammar.g4:
mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig"
-Dexec.args="com.test.parser.MyGrammar startRule
-gui <INPUT_FILE>"
答案 2 :(得分:1)
为什么Maven插件会运行TestRig
类? Maven插件的工作是将.g4
语法文件转换为适当包位置的.java
源文件,并确保编译这些生成的文件。 TestRig
不用于任何部分。
编辑:在许多应用程序中,我多年来一直使用ANTLR。在那段时间里,我从未更新过我的系统类路径,也没有从命令行运行ANTLR / gunit / TestRig或为它创建了别名。这样做对自动化测试没有帮助,并且不可避免地导致用户陷入您描述的问题。也就是说,TestRig在Maven插件中需要特殊支持的想法也从未在我脑海中浮现,因为已有更好的解决方案。
一些替代方案
inspect()
。TestRig.main(String[])
的JUnit测试。