【Java】【Maven】用IDEA开发一个java agent

创建一个空工程

创建一个agent-demo子模块

在pom文件中增加打包插件 注意修改<Premain-Class>和<Agent-Class>的值

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifestEntries>
                            <Premain-Class>zone.cong.Agent</Premain-Class>
                            <Agent-Class>zone.cong.Agent</Agent-Class>
                            <Can-Redefine-Classes>true</Can-Redefine-Classes>
                            <Can-Retransform-Classes>true</Can-Retransform-Classes>
                        </manifestEntries>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>attached</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

编写代理类,输出每个类的classname

package zone.cong;

import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.security.ProtectionDomain;

public class LogAgent implements ClassFileTransformer {
          
   
    public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
          
   
        System.out.println("agent -> " + className);
        return classfileBuffer;
    }
}

编写代理类

package zone.cong;

import java.lang.instrument.Instrumentation;

public class Agent {
          
   
    /**
     * jvm 参数形式启动,运行此方法
     */
    public static void premain(String agentArgs, Instrumentation inst) {
          
   
        inst.addTransformer(new LogAgent());
        System.out.println("premain");
    }
}

可以点击maven的按钮进行打包

生成的jar包

在idea中或者启动的时候配置agent参数 -javaagent:<jar包地址>

-javaagent:D:workspaceagent-demoagent-logagent-log	argetagent-log-1.0-SNAPSHOT-jar-with-dependencies.jar

或者在java启动时增加该参数

jave -javaagent:<jar包地址> -jar <需要启动的jar包>

一个入门的agent开发完成

经验分享 程序员 微信小程序 职场和发展