Antlr4:使用grun命令,触发NoClassDefFoundError

news2024/9/22 0:09:25

1. 意外的发现

  • 在学习使用grun命令时,从未遇到过错误

  • 最近使用grun命令,却遇到了NoClassDefFoundError的错误,使得grun测试工具无法成功启动

  • 错误复现:

    1. 使用antlr4命令编译Hello.g4文件,并为指定package(com.sunrise.hello
      antlr4 Hello.g4 -o ../java/com/sunrise/hello -package com.sunrise.hello
      
      最终生成的Java代码如下:
    2. 使用mvn clean compile命令编译整个project
    3. target/classes/com/sunrise/hello目录下执行grun命令解析token,出现NoClassDefFoundError的错误
  • 详细的错误日志如下:

    Exception in thread "main" java.lang.NoClassDefFoundError: HelloLexer (wrong name: com/sunrise/hello/HelloLexer)
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
            at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
            at org.antlr.v4.gui.TestRig.process(TestRig.java:129)
            at org.antlr.v4.gui.TestRig.main(TestRig.java:119)
    

2. 错误原因

  • 从报错信息看,貌似是HelloLexer有错误的包名,导致运行时JVM无法找到HelloLexer

  • 上网查阅NoClassDefFoundError的原因如下:

    NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误

  • 有一大堆文字,但是没看懂 😂 😂

  • 但是,对错误原因的简单描述跟当前情况十分吻合:生成的package为com.sunrise.hello的Java代码已经编译成功,但运行时却提示not found

  • 猜测:执行grun命令的路径不对,且作为GrammerName的Hello应该带包名

  • 验证猜测:回到target/classes目录,执行grun命令

    grun com.sunrise.hello.Hello r -tokens
    
  • 成功使用grun命令解析出tokens

3. 正确的解决办法

  • 使用grun测试lexer或parser时,如果生成的Java代码有设置package,需要到target/classes目录,并在GrammerName中使用类的完全限定名
  • 也就是需要带上package信息,就像下面的命令一样
    grun com.sunrise.hello.Hello r -tokens
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392791.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能学习07--pytorch10--目标检测:RCNN、Faster RCNN

括号里都是弹幕大佬的高赞发言 1 前言 Two Stage检测过程分两步走 前景:需要检测的目标 背景:不感兴趣的 生成候选框:将感兴趣目标框选出来,但是没有进行分类 具体使用哪一种,根据项目需求 自定义数据集 自己写一…

CAS 与 ABA问题

本文通过学习:周阳老师-尚硅谷Java大厂面试题第二季 总结的CAS和ABA相关的笔记一、CAS1、CAS定义CAS Compare-And-Swap,它是CPU并发原语。比较当前工作内存中的值和主物理内存中的值,如果相同则执行规定操作,否者继续比较直到主内…

【MySQL】第18章_MySQL8其它新特性

第18章_MySQL8其它新特性 1. MySQL8新特性概述 MySQL从5.7版本直接跳跃发布了8.0版本,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是多MySQL Optimizer优化器…

gitHub远程库

创建远程仓库注册一个gutHub账户点击号,在点击New repository新建一个远程仓库仓库名一般跟本地库的名称一致public公共的开源private私有的不公开远程仓库操作创建远程仓库别名基本语法git remote -v : 查看当前所有远程地址别名git remote add 别名 远…

ABAP ALV和OOALV设置单元格颜色,编辑

首先给大家分享一篇博客: REUSE_ALV_GRID_DISPLAY_LVC-可编辑单元格 文章目录单元格编辑单元格/行-颜色效果展示**需求:**我是想实现某个单元格可根据数据来判断是否是可以进行编辑的或要添加一个什么样的颜色. 我们需要用到下面的三个结构 ALV 控制: 单元格的类型表:LVC_T_ST…

Nios II软件开发流程简介(含工程)

软件安装 Nios II Eclipse软件打不开 ​ 安装完成quartus后,想要打开Nios II Eclipse软件,点击软件后发现没有任何反应。 ​ 这时要到安装目录C:\intelFPGA_pro\20.3\nios2eds\bin下,打开readme文件。 ​ 按readme中的内容下载eclipse-cpp-…

VTK中如何 搜索 目标点 最近的点或者点集( vtkPointLocator )

背景: 在vtk使用过程中,我们有时要搜索点或者cell最近的 单元, 仔细看源码,有时无法判断其具体是什么样子,因而这里做了可视化处理,方便我们更深刻的理解 vtkPointLocator 类型函数的使用; 过程: 1.了解其继承关系是必要的: 2.开始探索该函数的一些效果: 我们会将原始数据…

vmware安装redhat enterprise linux server 9.1

vmware安装redhat enterprise linux server 9.11、安装系统1.1 镜像文件2、更新系统2.1 注册系统到redhat软件仓库2.2 更新系统1、安装系统 1.1 镜像文件 官网下载:https://developers.redhat.com/products/rhel/download 2、更新系统 2.1 注册系统到redhat软件…

【编写中】html5+go+websocket不到150行代码,实现一个在线实时聊天的功能

阮一峰websocket 相关参考 websocket 什么是websocket 在了解什么是websocket之前,我们下说一说http,因为HTTP我们太熟了。我们知道,HTTP是一种基于应用层的网络协议,往往都是一个请求,一个相应。websocket呢&#…

为啥用 时序数据库 TSDB

前言 其实我之前是不太了解时序数据库以及它相关的机制的,只是大概知晓它的用途。但因为公司的业务需求,我意外参与并主导了公司内部开源时序数据库influxdb的引擎改造,所以我也就顺理成章的成为时序数据库“从业者”。 造飞机的人需要时刻…

VMware vCenter Server的安装和使用

准备工作 首先去官网下载好VCenter Server,然后准备安装,我这里下载的是6.0对应的镜像为VMware-VIMSetup-all-6.0.0-2656757.iso 需要注意: 开始安装 和安装其他操作系统一样,把镜像放入光驱或解压缩,我这里是在…

Dropout Reduces Underfitting论文解读

Dropout 在欠拟合的应用Dropout Reduces Underfitting(2023.3.2)写在前面摘要一、简介二、重新审视过拟合和欠拟合三、Dropout如何减少欠拟合四、方法五、实验早期随机失活分析晚期随机失活(Late Dropout)六、下游任务七、相关工作…

【零代码工具推荐】Max Creation Graph (MCG) 可视化图形编程工具

从3dMax 2016开始新加入了一个很牛great的功能,也就是“MCG”全称是Max Creation Graph,MCG可以让用户使用全可视化节点工作流程来创建修改器,几何体工具插件,使用MCG,可以创建一个新的插件,没错是插件&…

【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(下)

系列文章目录 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(上) 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate)12.2实时异构同步Oracle数据部署方案(中) 【大数据实时数据同步】超级详细的生产环境OGG(GoldenGate…

要点提炼|《数字中国建设整体布局规划》,看这一篇就够了!

《数字中国建设整体布局规划》/// 近日,中共中央、国务院印发了《数字中国建设整体布局规划》(以下简称“《规划》”),作为影响中国未来发展的重磅文件,被业界评价为“数字挂帅时代来临”。《数字中国建设整体布局规划…

【持续集成】Jenkins详细教程

文章目录一、jenkins是什么?二、CI/CD是什么?三、使用Jenkins进行PHP代码(单元)测试、打包。1.General2.源码管理3.构建触发器4.构建环境5.构建6.构建后操作7.其他相关配置四、进行jenkins project 构建五、构建结果说明六、jenkins权限管理最后&#xf…

【拼图】拼图游戏-微信小程序开发流程详解

还记得小时候玩过的经典拼图游戏吗,上小学时,在路边摊用买个玩具,是一个正方形盒子形状,里面装的是图片分割成的很多块,还差一块,怎么描述好呢,和魔方玩具差不多,有没有听说叫二维的…

【Leetcode——重排链表】

文章目录一、重排链表思路1.思路2.总结一、重排链表 对于这道题,有两种思路: 思路1. 1.使用一个线性表,存储链表中的每个节点,然后按照题目的条件,来链接线性表的各个节点即可。 使用左下标和右下标来定位线性表中的…

硬件学习 软件 Cadence day09 芯片PCB 封装导出DXF 文件

1.打开自己要导出 DXF 文件的 PCB 封装 (Allegro 软件) 2.导出DXF 文件的按钮 1.点击按钮,打开窗口 2.填写数据 3. 按下 Edit... 按钮 4. 编辑数据 5. 导出数据 ,生成DXF 文件 下面的选项自己选择 : Color mapping : …

希腊字母及读音

希腊字母24个希腊字母分别是:Αα、Ββ、Γγ、Δδ、Εε、Ϝϝ、Ζζ、Ηη、Θθ、Ιι、Κκ、Λλ、Μμ、Νν、Ξξ、Οο、Ππ、Ρρ、Σσ、Ττ、Υυ、Φφ、Χχ、Ψψ、Ωω。拼写Α α:阿尔法 AlphaΒ β:贝塔 BetaΓ γ&…