(使用java 11)我可以在运行时用jar注入代理,通过:
VirtualMachine jvm = VirtualMachine.attach(jvmPid); jvm.loadAgent("/path/to/agent.jar"); jvm.detach();
有没有办法不用jar装上?我可以用它来做 byte-buddy ,但是如果没有第三方库(如 byte-buddy ?
byte-buddy
jw5wzhpr1#
你必须有一个jar文件。byte-buddy代理(byte-buddy-agent,而不是byte-buddy-jar)包含代理清单头本身。在第一次尝试中,它尝试在本地文件系统上定位自己的jar(通过 getProtectionDomain().getCodeSource() ). 如果它不能这样做,或者作为非jar文件存在于文件夹中,那么它将创建一个具有所需属性的临时jar文件。字节伙伴代理是一个最小的零依赖jar。我建议使用它,因为attachapi的名称空间在旧的ibm和hotspot vm上不同,它需要在java9+上进行不同的设置,而且如果存在jna,byte buddy可以在非jdk vm上模拟附件(免责声明:我是作者。)
getProtectionDomain().getCodeSource()
1条答案
按热度按时间jw5wzhpr1#
你必须有一个jar文件。
byte-buddy代理(byte-buddy-agent,而不是byte-buddy-jar)包含代理清单头本身。在第一次尝试中,它尝试在本地文件系统上定位自己的jar(通过
getProtectionDomain().getCodeSource()
). 如果它不能这样做,或者作为非jar文件存在于文件夹中,那么它将创建一个具有所需属性的临时jar文件。字节伙伴代理是一个最小的零依赖jar。我建议使用它,因为attachapi的名称空间在旧的ibm和hotspot vm上不同,它需要在java9+上进行不同的设置,而且如果存在jna,byte buddy可以在非jdk vm上模拟附件(免责声明:我是作者。)