【问题标题】:TestRig / grun drops java.lang.NoClassDefFoundError when using the output directory -o option使用输出目录 -o 选项时,TestRig/grun 会丢弃 java.lang.NoClassDefFoundError
【发布时间】:2021-07-01 17:10:54
【问题描述】:

按照this post,我正在使用以下步骤从this repository 编译解析器/词法分析器:

export CLASSPATH=".:/usr/local/Cellar/antlr/&ltversion&gt/antlr-&ltversion&gt-complete.jar:$CLASSPATH" antlr &ltgrammarName&gt.g4 -o &ltsomeFolder&gt/ javac &ltsomeFolder&gt/&ltgrammarName&gt*.java

但是当我使用指令here:

grun <someFolder>/<grammarName> tokens -tokens < <inputFile>

我收到以下错误消息:

线程“main”中的异常 java.lang.NoClassDefFoundError: IllegalName: &ltsomeFolder&gt/&ltgrammarName&gtLexer 在 java.base/java.lang.ClassLoader.preDefineClass(ClassLoader.java:889) 在 java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1014) 在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151) 在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:825) 在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:723) 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:646) 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) 在 org.antlr.v4.gui.TestRig.process(TestRig.java:129) 在 org.antlr.v4.gui.TestRig.main(TestRig.java:119)

如果您能帮助我了解问题所在以及如何解决,我将不胜感激。

【问题讨论】:

    标签: java antlr antlr4


    【解决方案1】:

    我没有看到你在哪里指定了包名,所以现在你的 Java 类位于 中。请务必在该文件夹中编译它们。

    然后您需要将该文件夹添加到您的类路径(可能而不是“.”)

    尝试将 添加到您要导出的 CLASSPATH 中。然后把它从你的 grun 命令行中去掉。

    Java 只会从 Classpath 加载类(这是一个安全问题)。当 TestRig 运行时,它会尝试通过构建它为 Parser 生成的 Java 类名来加载您的类(Java 必须在类路径中的某处找到该类)。

    您的可以修改grun 别名以允许您指定一个目录来搜索您的类,并在Java 命令上使用-cp 选项,但这可能比只需将其添加到您用于此测试的类路径中即可。

    【讨论】:

    • 所以应该像export CLASSPATH="./&lt;someFolder&gt;:/usr/local...
    • 您的 中有 *.class 文件吗?它们应该在编译 ANTLR 放在那里的 *.java 文件时出现。此外,运行 grun 时不应指定该文件夹。
    猜你喜欢
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 2021-09-15
    • 2015-04-26
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 2016-02-12
    相关资源
    最近更新 更多