Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Antlr4“;“试验台”;还有maven_Java_Antlr4 - Fatal编程技术网

Java Antlr4“;“试验台”;还有maven

Java Antlr4“;“试验台”;还有maven,java,antlr4,Java,Antlr4,我正在努力弄清楚如何使用antlr4 maven插件来运行TestRig类 我已经阅读了mvnantlr4:help-Ddetail=true的输出,这是我能找到的唯一文档,但这并没有提到如何使用TestRig。那么,与maven一起使用试验台的推荐方法是什么?在这里使用grun-alias方法似乎不是很优雅 更新-推理 你好:) 没错,别误会我的意思,但我真的不明白你为什么不想在maven插件中使用这个功能?我不明白为什么它的灵魂目的应该是编译语法 目前,如果我使用Maven维护一个构建,并使

我正在努力弄清楚如何使用antlr4 maven插件来运行TestRig类

我已经阅读了
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插件中的特殊支持,因为更好的解决方案已经存在

一些备选方案

  • 您可以使用surefire插件,编写一个JUnit测试,直接对语法执行操作(创建一个lexer/parser,解析一些输入,甚至可能在生成的解析树上调用
    inspect()
  • 您可以使用surefire插件,编写一个JUnit测试,使用正确的参数显式调用
  • 您可以修改ANTLR 4 Maven插件,为运行TestRig添加一个新目标,并向项目提交一个pull请求,将其包含在未来的版本中(您需要提出一个非常有说服力的案例,因为已经有两个替代方案更适合使用ANTLR 4对项目进行长期成功测试)

  • 我有一个类似的问题,我想使用
    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,它将与现有的单元测试配合使用。干杯。