【问题标题】:Tutorials about javaagents [closed]关于 javaagents 的教程 [关闭]
【发布时间】:2012-08-10 09:10:25
【问题描述】:

我想学习一些关于 javaagents 的知识,但是研究起来并不容易。大多数结果是指JADE。我知道 java 代理可能意味着两件事:

  1. 用 Java 编程的代理是代理的化身 分布式系统的概念。
  2. 用于增强 JVM 工作的低级软件组件,例如 作为分析器、代码覆盖工具等

我发现了类似的问题here,但不幸的是它也指的是版本1。

你知道关于 javaagent 版本 2 的任何文章、初学者教程、示例项目吗? 我找到了一个here,,但我正在寻找更多。

【问题讨论】:

标签: java javaagents


【解决方案1】:

第二种情况是关于Java Instrumentation API - 这个链接指向一个Javadoc,它是相当具有描述性的。

这里是完整的说明和example of how to create java instrumentation agent

主要概念是:

  1. 实现一个静态的premain(类似于main)方法,如下所示:

    import java.lang.instrument.Instrumentation;
    
    class Example {
        public static void premain(String args, Instrumentation inst) {
            ...
        }
    }
    
  2. 创建一个清单文件(例如,manifest.txt),将此类标记为 pre-main 执行。它的内容是:

    Premain-Class: Example
    
  3. 编译类并将该类打包成JAR归档:

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

    java -javaagent:yourAwesomeAgent.jar -jar yourApp.jar
    

【讨论】:

  • 重要的是-javaagent 参数位于-jar 参数之前。
  • 我必须在我的清单中添加一个额外的条目才能使用 Javassist。您可以在我对这个问题的回答中看到:stackoverflow.com/questions/10423319/…
  • 我最近按照这些步骤构建了一个代理。我一直在创建 jar 时遇到问题,直到我发现该命令应该首先列出目标 .jar 文件,然后列出清单文件。
  • 您可能还需要在Example 类中提供一个空的main 方法,否则可能会抛出一个错误,抱怨缺少main 方法。
  • 记得在 manifest.txt 中添加一个空行
【解决方案2】:
猜你喜欢
  • 2011-03-06
  • 2013-01-08
  • 2012-01-14
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 2014-03-09
  • 2011-10-11
  • 2011-12-13
相关资源
最近更新 更多