https://github.com/jagentsphere/bytebuddy-agent-demo
learn bytebuddy and gradle
https://github.com/jagentsphere/bytebuddy-agent-demo
Last synced: over 1 year ago
JSON representation
learn bytebuddy and gradle
- Host: GitHub
- URL: https://github.com/jagentsphere/bytebuddy-agent-demo
- Owner: JAgentSphere
- License: mit
- Created: 2024-01-03T01:01:48.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-08-31T04:30:24.000Z (almost 2 years ago)
- Last Synced: 2025-02-24T18:49:10.546Z (over 1 year ago)
- Language: Java
- Size: 70.3 KB
- Stars: 124
- Watchers: 7
- Forks: 33
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Agent-Demo
使用 Byte Buddy 和 Gradle 构建一个最简单的 Java Agent
Java Agent 的入口类是 `com.jas.agent.Main`
```java
public class Main {
public static void premain(String args, Instrumentation inst) {
launch(args, inst);
}
public static void agentmain(String args, Instrumentation inst) {
launch(args, inst);
}
private static void launch(String args, Instrumentation inst) {
System.out.println("hello java agent");
}
}
```
提供 AgentBuilder 最简化便利测试的配置项
```java
AgentBuilder agentBuilder = new AgentBuilder.Default()
.ignore(ElementMatchers.none()) // 忽略空,即允许 hook 所有类
.with(AgentBuilder.RedefinitionStrategy.REDEFINITION) // 开启类被加载后也允许进行字节码修改
.with(AgentBuilder.Listener.StreamWriting.toSystemError().withErrorsOnly()) // 字节码修改失败打印错误信息到控制台
.with(AgentBuilder.Listener.StreamWriting.toSystemOut().withTransformationsOnly()) // 字节码修改成功也输出到控制台
.with(new DumpClassListener()); // 字节码修改成功把类信息给报错到 weaving/classes 目录下
```
## 编译
在项目目录下执行如下命令,会在 test 文件夹中生成 agent.jar 和 demo.jar
```shell
# linux or macos
./gradlew jar
# windows
gradlew.bat jar
```
## 启动 Java Agent
使用如下命令挂载 agent 启动 SpringBoot 程序,会打印 `hello java agent`
```shell
cd test && \
java -javaagent:agent.jar -jar demo.jar
```