本篇文章主要是为了记录踩的坑,避免下次又emo 了…
代码实现的效果如下图所示:
agent 代码:
新建 trace-agent
pom.xml 中的配置如下:(没有看错,不使用任何依赖)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifestEntries>
<Project-name>${project.name}</Project-name>
<Project-version>${project.version}</Project-version>
<Premain-Class>com.ibicd.TraceAgent</Premain-Class>
</manifestEntries>
</archive>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
新建类: com.ibicd.TraceAgent
包名和类名需要和maven pom.xml 配置文件中的 Premain-Class
完全相同,代码如下:
package com.ibicd;
import java.lang.instrument.Instrumentation;
public class TraceAgent {
public static void premain(String args, Instrumentation inst) {
System.out.println("TraceAgent.premain: " + args);
}
}
新建 trace-agent-demo
没什么特殊的代码,pom.xml 中不需要引入任何依赖,只需写一个测试类(AgentTest.java
):
package com.ibicd;
public class AgentTest {
public static void main(String[] args) {
System.out.println("hello world");
}
}
运行 AgentTest
时配置 java agent:
可能人人都知道只需配置对应的agent 路径就可以了,没错。就是:
-javaagent:trace-agent\target\trace-agent-1.0-SNAPSHOT.jar=name=张三
配置没问题呀,就是输出的内容始终都是 “hello world”
陷入沉思~
反复确认路径有没有写错,单次有没有写错~~
这就是要说的第二个坑,看下文
遇过的坑:
1. premain 中的参数类型错误
没看错,就2个入参都会写错!使用AI 编程,不得不说有时候 TA 真的很自作聪明,然而又想当然的认为TA很聪明,眼力跟不上。将 premain()
中的入参 args
类型定义为了 String[]
,狂汗!(真想给自己两巴掌~)
2. 虚拟机参数位置配错
正常来说,要运行一个类,要配置运行参数,就会打开:
于是看到下面这个红框起来的部分,然后把 参数写到 Program arguments
一栏(成功入坑):
这时,会无数次怀疑是我写的路径不对? 哪个单词写错了?改了又改还是输出 “hello world” ?
经过排查后,IDEA 把 VM options
藏起来了!打开方式:
再把上面的参数路径配置写入刚添加的输入框中:
然后再保存运行,查看控制台输出(终于松了一口气):
总结
用IDEA 添加参数时,需要先明确添加的是什么参数,不要见框就填!!!关于如何知道自己要添加的参数类型,参照下面的截图: