在学习使用grun命令时,从未遇到过错误
最近使用grun命令,却遇到了NoClassDefFoundError
的错误,使得grun测试工具无法成功启动
错误复现:
com.sunrise.hello
)antlr4 Hello.g4 -o ../java/com/sunrise/hello -package com.sunrise.hello
最终生成的Java代码如下: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)
从报错信息看,貌似是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
target/classes
目录,并在GrammerName中使用类的完全限定名grun com.sunrise.hello.Hello r -tokens
上一篇:近自由电子近似
下一篇:2023-3-6刷题情况