Java Antlr4“;“试验台”;还有maven
我正在努力弄清楚如何使用antlr4 maven插件来运行TestRig类 我已经阅读了Java Antlr4“;“试验台”;还有maven,java,antlr4,Java,Antlr4,我正在努力弄清楚如何使用antlr4 maven插件来运行TestRig类 我已经阅读了mvnantlr4:help-Ddetail=true的输出,这是我能找到的唯一文档,但这并没有提到如何使用TestRig。那么,与maven一起使用试验台的推荐方法是什么?在这里使用grun-alias方法似乎不是很优雅 更新-推理 你好:) 没错,别误会我的意思,但我真的不明白你为什么不想在maven插件中使用这个功能?我不明白为什么它的灵魂目的应该是编译语法 目前,如果我使用Maven维护一个构建,并使
mvnantlr4:help-Ddetail=true
的输出,这是我能找到的唯一文档,但这并没有提到如何使用TestRig。那么,与maven一起使用试验台的推荐方法是什么?在这里使用grun-alias方法似乎不是很优雅
更新-推理
你好:)
没错,别误会我的意思,但我真的不明白你为什么不想在maven插件中使用这个功能?我不明白为什么它的灵魂目的应该是编译语法
目前,如果我使用Maven维护一个构建,并使用antlr4 Maven插件
,它将在我的Maven存储库中安装插件和antlr4.1。既然已经有了这些,为什么我要在maven可以处理的情况下开始向类路径添加东西并创建别名呢?我是说,这才是maven真正的目的。如果我有一个antlr4:TestRig
目标,那么我所要做的就是使用它。无需手动维护类路径或创建bash别名。这就行了
在我的类路径中对本地maven存储库中的元素进行硬编码,并维护bash别名,要优雅得多。或者,每台机器维护两台设备。我希望使用的antlr版本(一个由我维护,只是为了使用TestRig,另一个由maven维护,用于其他一切)
此外,如果我想使用不同版本的antlr,那么我就不需要更新类路径和别名,maven只需为我管理所有这些:)为什么maven插件会运行
TestRig
类?Maven插件的工作是将.g4
语法文件转换为.java
源文件,并确保生成的文件得到编译<代码>测试装备不用于该测试装备的任何部分
编辑:我多年来一直在许多应用程序中使用ANTLR。在这段时间里,我从未更新过我的系统类路径,也没有从命令行操作过ANTLR/gunit/TestRig,也没有为它创建别名。这样做对自动化测试没有帮助,并且不可避免地会导致用户遇到您描述的问题。也就是说,我从未想过TestRig需要Maven插件中的特殊支持,因为更好的解决方案已经存在
一些备选方案
inspect()
)我有一个类似的问题,我想使用
TestRig
-gui
选项来调试我的语法。我没有找到通过antlr4 maven插件运行gui的方法,但我成功地构建了一个令人满意的类路径。关键是要包含目标/类
#假设您的项目在$project中。。
CLASSPATH=“.:/usr/local/lib/antlr-4.1-complete.jar:$PROJECT/target/classes”
别名grun='java org.antlr.v4.runtime.misc.TestRig'
mvn-q编译
grun MyGrammer启动规则-gui<测试输入
应该生成一个漂亮的语法树GUI视图
这可能不是您想要的答案,但我希望它能帮助其他人(例如,我,明天,当我忘记的时候)这就是我使用Maven调用TestRig的方式:
mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig"
-Dexec.args="<DOT_NOTATION_GRAMMAR_CLASSPATH> <START_RULE>
-gui <INPUT_FILE>"
mvn exec:java-Dexec.mainClass=“org.antlr.v4.runtime.misc.TestRig”
-Dexec.args=”
-gui“
因此,如果您在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>"
mvn exec:java-Dexec.mainClass=“org.antlr.v4.runtime.misc.TestRig”
-Dexec.args=“com.test.parser.MyGrammar startRule
-gui“
@JustDanyul谢谢你,现在你的问题更清楚了。我更新了我的答案。谢谢你再次回复我。我没有想到选项2,它将与现有的单元测试配合使用。干杯。