使用javaagent运行时获取“java.lang.NoClassDefFoundError”

问题描述 投票:1回答:1

我正在尝试使用BCEL来检测带有javaagent.jar的jar文件(main.jar)。基本上我在字节码中找到任何aload,我试图在类“someclass”中使用名为Fun()的静态函数插入一个函数调用

if (opcode instanceof aload) {
 iFactory.createInvoke("someclass", "fun", Type.VOID, new Type[]{}, Constants.INVOKESTATIC);

我的“someclass”类驻留在javaagent.jar中

在执行

java  -javaagent:javaagent.jar -jar main.jar

要么

java  -javaagent:javaagent.jar -jar main.jar javaagent.jar

或者(我为我的“someclass”创建了一个名为someclasscontained.jar的独立jar)

java -cp someclasscontained.jar  -javaagent:javaagent.jar -jar main.jar 

我正进入(状态

Exception in thread "main" java.lang.NoClassDefFoundError: someclass

错误。我尝试使用-bootclasspath / p选项,但仍然无法正常工作。有没有人有任何线索?

(1)所有jar都位于同一个文件夹中2)这个问题可能类似于一个问题,但解决方案对于该问题不正确/满意,所以请不要将其标记为重复)

java jar instrumentation bcel
1个回答
2
投票

如果someclass在不同的jar文件中定义,则需要将其添加到代理jar清单文件中的Boot-Class-Path列表中:

some.jar  -> contains someclass.class
javaagent.jar -> contains your instrumenting classes and MANIFEST.MF file

MANIFEST.MF file should contain line like
Boot-Class-Path: javaagent.jar some.jar
© www.soinside.com 2019 - 2024. All rights reserved.