【问题标题】:Instrumentation Agent not hooking up to the app仪表代理未连接到应用程序
【发布时间】:2018-02-09 01:17:53
【问题描述】:

我的代理类

package com.mytransformers;

import java.lang.instrument.Instrumentation;

public class MyTransformerAgent {

    public static void premain(String args, Instrumentation inst) {
        MyTransformer transformer = new MyTransformer();
        inst.addTransformer(transformer);
    }

}

我的变压器:

public class MyTransformer implements ClassFileTransformer{

    public byte[] transform(ClassLoader arg0, String arg1, Class<?> arg2, ProtectionDomain arg3, byte[] arg4)
            throws IllegalClassFormatException {

        // processing to return some bytes/null;
    }

我使用 maven POM 构建了我的清单,我可以确认我的 jar 在 META-INF 中有以下清单

Manifest-Version: 1.0
Premain-Class: com.mytransformers.MyTransformerAgent
Archiver-Version: Plexus Archiver
Built-By: ha9u63@r
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Class-Path: C:/apache-tomcat-8.5.16/bin/tomcat-juli.jar
Can-Set-Native-Method-Prefix: true
Created-By: Apache Maven 3.0.5
Build-Jdk: 1.8.0_141
Boot-Class-Path: C:/apache-tomcat-8.5.16/lib/tomcat-coyote.jar

我将我的应用程序 jar(简单的 Hello World 1 行语句)和代理 jar 复制到同一个文件夹中并运行以下命令:

java -javaagent:myagent.jar -jar myapp.jar

而且我不断收到以下错误:

Exception in thread "main" java.lang.ClassNotFoundException: com.mytransformers.MyTransformerAgent
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)
        at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)
FATAL ERROR in native method: processing of -javaagent failed

这里还缺少什么?我有点困惑。是否有一些我破坏的类加载委托?

问候,

【问题讨论】:

  • 您是否确认代理类在 jar 文件中,在正确的目录中?你的转换器真的对tomcat有依赖吗?
  • 是的,它有并且类在那里我使用 javap 验证我什至尝试不使用包,即 jar 中的纯类。没有运气
  • 尝试使用 Java 9 运行。iirc,当类查找由于其他依赖关系而失败时,它会提供更详细的信息,因此也许您可以从该测试中获得有用的信息。

标签: java instrumentation


【解决方案1】:

嗯...看起来 java 说根据您的清单在 C:/apache-tomcat-8.5.16/lib/tomcat-coyote.jar 中找不到类 com.mytransformers.MyTransformerAgent =)

也许将您的 jar 添加到 Boot-Class-Path 列表中,例如:
Boot-Class-Path: C:/apache-tomcat-8.5.16/lib/tomcat-coyote.jar myagent.jar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2018-06-13
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多