0

我使用 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 中无效,我该如何解决呢?

谢谢,任何建议表示赞赏,-朱利安

4

1 回答 1

3

添加.到您的 CLASSPATH,因此您的命令变为: java -cp lib/asm-all-4.1.jar:. HelloDump

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

于 2013-04-03T07:35:03.967 回答