这是一篇简单的配置java agent时遇到问题记录集
Agent
自行搜索
IDEA配置AGENT项目
参考: www.jetbrains.com/help/idea/g…
在build.gradle中配置
// build.gradle
jar {
manifest {
attributes "Can-Redefine-Classes": true
attributes "Can-Retransform-Classes": true
attributes "Premain-Class": "com.test.HelloAgent"
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
其他项目中使用
IDEA中编辑配置 VM options中添加
-javaagent:"<path-to-agent.jar>"
ClassLoader问题
在agent transform过程中, 可能会在各个类中插入代码, 比如在java.lang引用agent jar中的一些类 此时直接运行被注入的程序, 可能会出现如下异常
Exception in thread "main" java.lang.NoClassDefFoundError: com/test/log/Logger
原因可以参考如下链接: stackoverflow.com/questions/2…
这里想要说明的是 在配置Boot-Class-Path时, 可以直接添加agent jar即可, 不用单独把agent中的代码再封装到一个单独的jar 注意这里的相对路径是该agent.jar所在的目录, 这非常重要,很容易就把Boot-Class-Path路径写错了
此外在Windows上,
attributes "Boot-Class-Path": "D:\Practices\IDEA\HelloAgent\libs\HelloLog-1.0-SNAPSHOT.jar"
上面的路径是不支持的,
下面的路径是支持的
attributes "Boot-Class-Path": "D:/Practices/IDEA/HelloAgent/libs/HelloLog-1.0-SNAPSHOT.jar"
大坑。。。