我正在努力弄清楚如何使用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会简单地为我管理所有这些:)
小智 5
这就是我使用 Maven 调用 TestRig 的方式:
mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig"
-Dexec.args="<DOT_NOTATION_GRAMMAR_CLASSPATH> <START_RULE>
-gui <INPUT_FILE>"
Run Code Online (Sandbox Code Playgroud)
因此,如果您在 src/main/antlr4/com/test/parser 中有 MyGrammar.g4,其起始规则为 startRule:
mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig"
-Dexec.args="com.test.parser.MyGrammar startRule
-gui <INPUT_FILE>"
Run Code Online (Sandbox Code Playgroud)
为什么 Maven 插件会运行该类TestRig?Maven 插件的工作是将.g4语法文件转换为.java正确包位置中的源文件,并确保这些生成的文件得到编译。TestRig不用于其中的任何部分。
编辑:我在许多应用程序中使用 ANTLR 已经很多年了。在那段时间里,我从未更新过系统类路径,也从未从命令行操作 ANTLR/gunit/TestRig 或为其创建别名。这样做对自动化测试没有帮助,并且不可避免地会导致用户遇到您所描述的问题。也就是说,我也从未想过 TestRig 需要 Maven 插件的特殊支持,因为已经存在更好的解决方案。
一些替代方案
inspect()生成的解析树。TestRig.main(String[])正确参数显式调用的 JUnit 测试。