可以在sbt中工作,但不能在原始Java中工作:在使用“javac”编译.class文件之后,为什么';找到了吗?
我使用ObjectWeb的Asmiger获得了一个“HelloDump.java”,并添加了类加载器和一个main方法来加载和运行伪造的“HelloWorld” 如果我在构建工具sbt中运行'HelloDump.java',一切正常,并输出“HelloWorld!” 但如果我使用原始Java,它就会崩溃“HelloDump.java”似乎编译正常,但生成的“HelloDump.class”显然存在,但似乎无法识别(请检查以下顺序): 显式地将可以在sbt中工作,但不能在原始Java中工作:在使用“javac”编译.class文件之后,为什么';找到了吗?,java,sbt,java-bytecode-asm,Java,Sbt,Java Bytecode Asm,我使用ObjectWeb的Asmiger获得了一个“HelloDump.java”,并添加了类加载器和一个main方法来加载和运行伪造的“HelloWorld” 如果我在构建工具sbt中运行'HelloDump.java',一切正常,并输出“HelloWorld!” 但如果我使用原始Java,它就会崩溃“HelloDump.java”似乎编译正常,但生成的“HelloDump.class”显然存在,但似乎无法识别(请检查以下顺序): 显式地将添加到类路径也没有帮助 那么,为什么这在sbt中起作用
添加到类路径也没有帮助
那么,为什么这在sbt中起作用,而在原始Java中却不起作用,我该如何修复它呢
谢谢,谢谢你的建议,
-Julian将
添加到类路径中,这样您的命令就变成:
java-cp-lib/asm-all-4.1.jar:。HelloDump
JVM找不到该类的原因是,它只在类路径上查找,而不在其他地方。将
添加到类路径,因此您的命令变为:
java-cp-lib/asm-all-4.1.jar:。HelloDump
JVM找不到该类的原因是,它看起来只在类路径上,而不在其他地方。非常感谢这一课!我想我已经试过了。我认为我们之间存在转录错误,因此,对于家里的人来说,有效的代码是
java-cp lib/asm-all-4.1.jar:。HelloDump
。非常感谢您的课程!我想我已经试过了。我认为我们之间存在转录错误,因此,对于家里的人来说,有效的代码是java-cp lib/asm-all-4.1.jar:。HelloDump
。
$ 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.