agentmain 使用过程中的坑,看看你有没有遇到

版权声明:如果觉得文章对你有用,转载不需要联系作者,但请注明出处 https://blog.csdn.net/jinxin70/article/details/85686351

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的绝对路径配置成相对路径:

pom中使用本地环境变量

Maven 读取环境变量

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内部原理

猜你喜欢

转载自blog.csdn.net/jinxin70/article/details/85686351