【Java】【Maven】用IDEA开发一个java agent
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:\workspace\agent-demo\agent-log\agent-log\target\agent-log-1.0-SNAPSHOT-jar-with-dependencies.jar
或者在java启动时增加该参数
jave -javaagent:<jar包地址> -jar <需要启动的jar包>
一个入门的agent开发完成
更多推荐
所有评论(0)