java - 在 sbt 中有效,但在原始 Java : after using `javac` to compile a . 类文件中无效,为什么 `java` 找不到它?

标签 java sbt java-bytecode-asm

我使用 ObjectWeb 的 ASMifier 来获取“HelloDump.java”,并添加类加载器和一个 main 方法来加载和运行欺骗性的“HelloWorld”。

如果我在构建工具 sbt 中运行“HelloDump.java”,一切正常并输出“HelloWorld!”。

但是如果我使用原始 Java,它就会崩溃。 “HelloDump.java”似乎编译正常,但生成的“HelloDump.class”明显存在,但似乎无法识别(检查下面的序列):

$ julianpeeters@julianpeeters-virtual-machine ~/asm-example $ javac -cp lib/asm-all-4.1.jar HelloDump.java

$ julianpeeters@julianpeeters-virtual-machine ~/asm-example $ ls
DumpLoader.java.bak  HelloDump.class.bak                 Hello.java.bak
Hello.class.bak      HelloDump$DynamicClassLoader.class  lib
HelloDump.class      HelloDump.java                      README.md

$ julianpeeters@julianpeeters-virtual-machine ~/asm-example $ java -cp lib/asm/all/4.1.jar HelloDump
Exception in thread "main" java.lang.NoClassDefFoundError: HelloDump
Caused by: java.lang.ClassNotFoundException: HelloDump
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: HelloDump. Program will exit.

显式添加 . 到类路径也没有帮助。

那么为什么这在 sbt 中有效,但在原始 Java 中无效,我该如何修复它?

谢谢,任何建议都很感激, -朱利安

最佳答案

添加.到你的 CLASSPATH,所以你的命令变成: java -cp lib/asm-all-4.1.jar:. HelloDump

JVM 找不到该类的原因是它在类路径上查找,而在其他地方找不到。

关于java - 在 sbt 中有效,但在原始 Java : after using `javac` to compile a . 类文件中无效,为什么 `java` 找不到它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15781374/

相关文章:

java - UserDetailsS​​ervice 未被调用

spring - 为什么 Cobertura 不能在我的 Spring/Hibernate Webapp 中工作?

java - 将未导出/未打开的包添加到模块信息的 ModulePackages 的用例是什么?

scala - 是否可以使用 sbt 创建分层的多项目构建?

hadoop - 从 sbt 文件中的 spark 库中排除 hadoop 依赖

scala - 被审查者与模式类型不兼容;找到 : package. SomeObject required: Unit

java - 创建 Lambda 函数实例

java - 使用 Eclipse 将 JavaHelp 系统集成到我的应用程序中时,findHelpSet 返回空 URL

Java String.valueOf(null) 抛出 NPE,但 Object a = null; String.valueOf(a) 返回 'null'

Eclipse控制台无输出