com.sun.tools.attach.AttachNotSupportedException: no providers installed
我出现这个报错,是因为我引的包有问题,本地装了jdk的话,可以这样引用tools.jar
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.5.0</version>
<scope>system</scope>
<systemPath>D:/Program Files/Java/jdk1.8.0_192/lib/tools.jar</systemPath>
</dependency>
systemPath标签用来指定本地的tools.jar位置
可以把tools.jar的绝对路径配置成相对路径:
Eclipse maven工程 Missing artifact com.sun:tools:jar:1.7.0:system 解决方法
修改后:
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.5.0</version>
<scope>system</scope>
<systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>
com.sun.tools.attach.AgentInitializationException: Agent JAR loaded but agent failed to initialize
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内部原理