有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试使用javaagent插入jar文件(main.jar)。jar使用BCEL。基本上,每当我在字节码中找到aload时,我都会尝试使用

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

我的“someclass”类驻留在javaagent中。罐子

执行

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

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

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

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

我越来越

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

错误。我尝试了-bootclasspath/p选项,但仍然不起作用。有人有线索吗

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


共 (1) 个答案

  1. # 1 楼答案

    如果在不同的jar文件中定义了someclass,则需要将其添加到代理jar清单文件中的引导类路径列表中:

    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