关于JavaAgent的教程

关于JavaAgent的教程,java,javaagents,Java,Javaagents,我想学习一些关于JavaAgent的知识,但研究并不容易。大多数结果都涉及到JADE。我知道java代理可能意味着两件事: 用Java编程的代理是代理的化身 分布式系统的概念 用于增强JVM工作的低级软件组件,如 作为探查器、代码覆盖工具等 我发现了类似的问题,但不幸的是,它也涉及到版本1 您知道关于javaagent的第2版文章、初学者教程和示例项目吗? 我已经找到了一个,但我正在寻找更多。第二个案例谈到了-这个链接指向一个Javadoc,它相当具有描述性 这里是完整的说明和一个例子 主要概念

我想学习一些关于JavaAgent的知识,但研究并不容易。大多数结果都涉及到
JADE
。我知道java代理可能意味着两件事:

  • 用Java编程的代理是代理的化身 分布式系统的概念
  • 用于增强JVM工作的低级软件组件,如 作为探查器、代码覆盖工具等
  • 我发现了类似的问题,但不幸的是,它也涉及到版本1

    您知道关于javaagent的第2版文章、初学者教程和示例项目吗?
    我已经找到了一个,但我正在寻找更多。

    第二个案例谈到了-这个链接指向一个Javadoc,它相当具有描述性

    这里是完整的说明和一个例子

    主要概念是:

  • 实现静态
    premain
    (类似于
    main
    )方法,如下所示:

    import java.lang.instrument.Instrumentation;
    
    class Example {
        public static void premain(String args, Instrumentation inst) {
            ...
        }
    }
    
    java -javaagent:yourAwesomeAgent.jar -jar yourApp.jar
    
  • 创建一个清单文件(比如,
    manifest.txt
    ),将该类标记为预主执行。其内容包括:

    Premain-Class: Example
    
  • 编译该类并将该类打包到
    JAR
    存档中:

    javac Example.java
    jar cmf manifest.txt yourAwesomeAgent.jar *.class
    
  • 使用
    -javaagent
    参数执行JVM,如下所示:

    import java.lang.instrument.Instrumentation;
    
    class Example {
        public static void premain(String args, Instrumentation inst) {
            ...
        }
    }
    
    java -javaagent:yourAwesomeAgent.jar -jar yourApp.jar
    

  • 如第#2点所述,javaagent没有多少有用的资源


    还有一些有用的链接,
    -javaagent
    参数在
    -jar
    参数之前,这一点很重要。我必须在清单中添加一个额外的条目,以便使用Javassist。您可以在我对这个问题的回答中看到:我最近按照以下步骤构建了一个代理。我一直在创建jar时遇到问题,直到我发现命令应该首先列出target.jar文件,然后列出manifest文件。您可能还需要在
    示例
    类中提供一个空的
    main
    方法,或者,可能会抛出一个错误,抱怨缺少main方法。请记住在manifest.txt中使用一个空行