调用使用Java ASM添加的方法时出现NoClassDefFoundError错误

时间:2012-10-18 08:30:02

标签: java java-bytecode-asm

我正在使用ASM为代码注入代码:

    @Override
    public void visitCode() {
        visitMethodInsn(Opcodes.INVOKESTATIC, "sssss/CopyOfsss", "foo", "()V");

        super.visitCode();
    }


Exception in thread "main" java.lang.NoClassDefFoundError: sssss/CopyOfsss
    at java.util.regex.Pattern$Node.match(Pattern.java)
    at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
    at java.util.regex.Pattern$Curly.match0(Pattern.java:3760)
    at java.util.regex.Pattern$Curly.match(Pattern.java:3744)
    at java.util.regex.Matcher.match(Matcher.java:1127)
    at java.util.regex.Matcher.matches(Matcher.java:502)
    at sssss.CopyOfsss.main(CopyOfsss.java:26)

请帮忙〜

1 个答案:

答案 0 :(得分:0)

好吧,我得到了答案。这是因为注入的类由引导类加载器加载,因此注入的代码不能调用“CopyOfsssss”中的方法。请参阅this article。解决方案是将“-Xbootclasspath / a:/path/yourclass.lib”添加到jvm参数中。注意“Xbootclasspath”之后的“/ a”表示附加。