我出现这个报错,是因为我引的包有问题,本地装了jdk的话,可以这样引用tools.jar
com.sun
tools
1.5.0
system
D:/Program Files/Java/jdk1.8.0_192/lib/tools.jar
systemPath标签用来指定本地的tools.jar位置
可以把tools.jar的绝对路径配置成相对路径:
pom中使用本地环境变量
Maven 读取环境变量
Eclipse maven工程 Missing artifact com.sun:tools:jar:1.7.0:system 解决方法
修改后:
com.sun
tools
1.5.0
system
${env.JAVA_HOME}/lib/tools.jar
loadAgent时报错了:
然后看了下业务线程的后台日志:
adding retransformable transformers is not supported in this environment
看这个样子是不支持,我一下就想到一个配置
在META-INF/MANIFEST.MF文件中:
Manifest-Version: 1.0
Agent-Class: com.umbrella.robot.agent.AgentMainTraceAgent
Can-Redefine-Classes: true
最后加上一行
Can-Retransform-Classes: true
修改后:
Manifest-Version: 1.0
Agent-Class: com.umbrella.robot.agent.AgentMainTraceAgent
Can-Redefine-Classes: true
Can-Retransform-Classes: true
可运行的源码都已经提交在https://gitee.com/jinxin.70/javaagentparent。
总结:
所谓的坑,其实大都是因为对使用的工具不熟悉导致的,比如错误的配置,或者没有配置某些配置。说白了,其实是不够熟悉。
简言之,没有遵守工具的使用规范。
每一种工具都是用来解决某些问题的,有它自己擅长的领域,反之,有它不适合的领域。
觉得吧,通过故意试错,跟源码,应该是最快的熟悉的过程,当然这种也不是绝对的,有时间再扯。
通过对异常代码的跟踪,对agent的源码更熟悉了,后面再写一篇源码解析的文章,记录一下agent内部原理