# JavaAgent **Repository Path**: shao_win/JavaAgent ## Basic Information - **Project Name**: JavaAgent - **Description**: 今天在学习pinpoint的时候,偶然发现javaagent这个东西,所以就想做一个简单的demo记录一下 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2016-12-13 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #JavaAgent ## 简介 Java Agent是拥有修改应用的一个软件组件。在agent的上下文中,instrumentation提供了重新定义和修改装载在运行时的类(class)的能力。 ## 使用maven搭建一个简单的java agent 1. 使用idea创建一个maven项目 2. 新增一个类MyAgent ```java package com.foreveross.shaowin.agent; import java.lang.instrument.Instrumentation; /** * Created by chenshaowen on 2016/12/13. */ public class MyAgent { /** * 该方法在main方法之前运行,与main方法运行在同一个JVM中 * 并被同一个System ClassLoader装载 * 被统一的安全策略(security policy)和上下文(context)管理 * * @param agentOps * @param inst * @author shaowin * @create 2016/12/13 */ public static void premain(String agentOps, Instrumentation inst) { System.out.println("=========premain方法执行========"); System.out.println(agentOps); } /** * 如果不存在 premain(String agentOps, Instrumentation inst) * 则会执行 premain(String agentOps) * * @param agentOps * @author shaowin * @create 2016/12/13 */ public static void premain(String agentOps) { System.out.println("=========premain方法执行2========"); System.out.println(agentOps); } } ``` 3. 在resources/META-INF下新增一个MANIFEST.MF ```xml Manifest-Version: 1.0 Premain-Class: com.foreveross.shaowin.agent.MyAgent Can-Redefine-Classes: true ``` 4. 修改pom.xml文件: ```xml 4.0.0 com.foreveross.shaowin java-agent 1.0-SNAPSHOT jar org.apache.maven.plugins maven-jar-plugin 2.6 src/main/resources/META-INF/MANIFEST.MF true ``` 5. 打包成一个jar包 ```shell mvn package ``` ps:按照以上步骤即可打包成一个简单的java agent的例子的jar包,在其他项目运行的时候使用java -javaagent指定该jar包即可进行代码注入。(这里结合java-agent-demo作一个例子)