Java 代理不会加载到 JVM 中

标签 java jvm

我正在尝试将 Java 代理加载到正在运行的 JVM 中。我有 JVM PID,但每当我尝试将代理加载到 JVM 中时,都会收到错误 com.sun.tools.attach.AgentLoadException:未找到代理 JAR 或没有代理类属性。两个文件位于同一目录中。我使用 javac JavaAgent.javajar cmf manifest.txt JavaAgent.jar *.class 编译该类并将该类打包到 JAR 存档中。任何帮助将不胜感激,提前致谢。

代理安装程序

package com.company;
import com.sun.tools.attach.*;

import java.io.IOException;

public class AgentLoader {

    public static void loadAgent() {
        String agentPath = "JavaAgent.jar";

        System.out.println("Dynamically loading java agent");
        String pid = "9484";

        try {
            VirtualMachine vm = VirtualMachine.attach(pid);
            vm.loadAgent(agentPath);
            vm.detach();
        }
        catch (Exception e){
            throw new RuntimeException(e);
        }
    }
}

JavaAgent

package com.company;
import java.lang.instrument.Instrumentation;

class JavaAgent {
    private static Instrumentation instrumentation;

    public static void agentmain (String args, Instrumentation inst){
        System.out.println("Java Agent inserted");
    }

}

Manifest.txt

Main-Class: com.company.MyMainClass
Agent-Class: com.company.AgentLoader
Can-Redefine-Classes: true
Can-Retransform-Classes: true
<小时/>

更新

感谢 apangin,我现在可以加载代理,但无法初始化com.sun.tools.attach.AgentInitializationException:代理 JAR 已加载,但代理无法初始化。我正在运行 Oracle JDK。

最佳答案

agentPath中指定完整的绝对路径。

list 应命名为MANIFEST.MF

Agent-Class 应该是代理的完全限定类名:com.company.JavaAgent

关于Java 代理不会加载到 JVM 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40169134/

相关文章:

java - 网络启动应用程序 : SecurityException: setContextClassLoader

java - 确定 JVM 默认时区

java - 仅发布形式的 CAS

java - Java 编译器是否消除了 getters 的函数调用?

java - 32位JVM : Maximum Heap space?

java - JSP索引管理器-eclipse

java - 具有 ASM 的 JVM INVOKESPECIAL 私有(private)构造函数

java - 如何使用 mongodb-java-driver 进行 upsert

java - 如何使用 oAuth2 通过 EWS 访问 Exchange Server 中的一个特定邮箱

java - 关于铁路系统建模的问题